Как прочитать байт обратно в Java? - PullRequest
0 голосов
/ 03 марта 2019

Мне нужно прочитать байты из файла, превратить их в строку, сделать что-то со строкой, затем вернуть байты из строки, поэтому у меня есть следующий код:

byte[] bFile=readFileBytes(filePath);
StringBuilder massageBuilder=new StringBuilder();

for (int i=0;i<bFile.length;i++) massageBuilder.append(bFile[i]);

String x=massageBuilder.charAt(n)+"";

...

byte b=x.getBytes();

Но последний шаг не возвращает байт, что не так, я хочу вернуть "massageBuilder.charAt (n)"?

1 Ответ

0 голосов
/ 03 марта 2019

Невозможно вернуться к исходным байтам, учитывая то, как вы добавляете их в свой построитель строк.

Возьмите этот пример:

byte[] bFile = "This is the input string".getBytes();
StringBuilder massageBuilder = new StringBuilder();

for (int i = 0; i < bFile.length; i++)
    massageBuilder.append(bFile[i]);

Когда вы печатаете massageBuilder, вы получите

8410410511532105115321161041013210511011211711632115116114105110103

Они становятся случайной последовательностью чисел, которая не дает возможности отличить оригинальные байты.Один или несколько символов в результирующей строке будут связаны с одним вводом byte.Даже если бы вы знали набор символов исходного текста, у вас все равно были бы проблемы из-за неоднозначных последовательностей.

Это могло бы быть возможно, если бы вы использовали какой-либо разделитель ...

massageBuilder.append(bFile[i]).append("-");
//84~104~105~115~32~105~115~32~116~104~101~32~105~110~112~117~116~...

В этом случае вы можете разделить его и перестроить свой байтовый массив.

...