๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์›น๊ณต๋ทฐ

[java] Byte to string to json (gson ์‚ฌ์šฉ) ์—๋Ÿฌ ํ•ด๊ฒฐ

by ์ด๋…ธํ‚ค_ 2022. 2. 17.

ํ˜„์ƒ

person.json ํŒŒ์ผ์— ์ €์žฅ๋œ ์‚ฌ๋žŒ ์ •๋ณด(์ด๋ฆ„, ๋‚˜์ด ๋“ฑ)์„ ์ฝ์–ด์™€ Person ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—… ์ค‘ ๋ฐœ์ƒ

์‚ฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Gson, FileInputStream

๊ธฐ์กด ์ฝ”๋“œ

 public void readInfo() throws IOException {
        final String filename = getFilesDir().getAbsolutePath() + "/person.json";
        System.out.println(filename);

        Gson gson = new Gson();

        FileInputStream fis = new FileInputStream(filename);
        byte[] buffer = new byte[1024];
        Arrays.fill(buffer, (byte)0);
        fis.read(buffer);

        String newStr = new String(buffer, StandardCharsets.UTF_8);
        boolean  isJson = isJSONValid(newStr); //JSON์ธ์ง€ ์•„๋‹Œ์ง€ ๊ฒ€์‚ฌํ•ด์„œ ํ†ต๊ณผ! 

        if(isJson)
        {
            System.out.println(newStr);
            Person p = gson.fromJson(newStr, Person.class); //์ฃฝ๋Š” ์ง€์ 

        }
    }

์—๋Ÿฌ ๋กœ๊ทธ

use jsonreader.setlenient(true) to accept malformed json

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

setlenient ์ฐพ๋‹ค๊ฐ€ ์‹œ๊ฐ„์„ ๋‚ ๋ ธ๋Š”๋ฐ ๋‚˜์˜ ๊ฒฝ์šฐ์—๋Š” byte์—์„œ string์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ, (byte)0 ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ๋ถ™์–ด ์žˆ์—ˆ๋‹ค. string ๊ฐ’์„ ์ฐ์–ด๋ณด๋ฉด "{ xxxxx }0000000" ์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ gson์„ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค ๋•Œ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜๊ฒƒ.

string ๊ฐ’์„ ์ฝ์–ด์˜จ ํ›„, 0๊ฐ’์„ ์ œ๊ฑฐํ•œ ๋’ค gson์œผ๋กœ ๊ฐ์ฒด ๋ณ€ํ™˜ํ•˜๋‹ˆ ์„ฑ๊ณต์ ์œผ๋กœ ๋˜์—ˆ๋‹ค.

ํ•ด๊ฒฐ ์ฝ”๋“œ

static String trimZeros(String str) {
        int pos = str.indexOf(0);
        return pos == -1 ? str : str.substring(0, pos);
}

public void readInfo() throws IOException {
        final String filename = getFilesDir().getAbsolutePath() + "/person.json";
        System.out.println(filename);

        Gson gson = new Gson();

        FileInputStream fis = new FileInputStream(filename);
        byte[] buffer = new byte[1024];
        Arrays.fill(buffer, (byte)0);
        fis.read(buffer);

        String newStr = new String(buffer, StandardCharsets.UTF_8);
        newStr = trimZeros(newStr); //์ถ”๊ฐ€๋œ ์ฝ”๋“œ
        boolean  isJson = isJSONValid(newStr);

        if(isJson)
        {
            System.out.println(newStr);
            Person p = gson.fromJson(newStr, Person.class);

        }
    }

์ฐธ์กฐ ๋งํฌ

์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ

๋Œ“๊ธ€