java, write to file, unicode

174
26 апреля 2018, 11:29

У меня возникла проблема

Есть массив byte[], в котором лежат 6 байт: {-23,-99,38,122,16,0}; Я их записываю в файл:

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(encodedStringText)));
writer.write(Arrays.toString(encString));
writer.close();

После этого размер файла вместо положенных 6 становится 26. Затем я пытаюсь считать, если записывать информацию в String, получаю те самые 6 первоначальных байт, но при попытке перевести в байты получаю 26 непонятных байт. Считываю так:

reader = new BufferedReader(new InputStreamReader(new FileInputStream(encodedStringText)));
StringBuilder stringBuilder1 = new StringBuilder();
while (reader.ready())
    stringBuilder1.append(reader.readLine());
byte[] decArray = stringBuilder1.toString().getBytes();

Результат: {91,45,50,23,.....(26)}. В чем проблема? Использовал различные кодировки: utf-8, utf-16, win1251, cp1251 и т.д., не помогло.

UPD. Встает вопрос, мне необходимо работать с char или же String, поэтому я и пытался считывать через BufferedReader. После того, как получил строку - нужно разбить ее на символы а символы на байты, в эл-тах строки значения те же, что были записаны в качестве байт, но когда пытаюсь перезапись строку в массив байт, то получается фигня. Что же, насчет записи в файл - все получилось и с размером все устаканилось, а как тогда правильно считать с файла?

 reader = new BufferedReader(new InputStreamReader(new FileInputStream(encodedStringText)));
 StringBuilder stringBuilder1 = new StringBuilder();
 while (reader.ready()    
      stringBuilder1.append(reader.readLine());
 byte[] decArray = stringBuilder1.toString().getBytes();

пытаюсь считывать так, опять проблема с тем, что получается в массиве байт

Answer 1

Writer и Reader предназначены для работы с символами и со строками, с байтами же удобнее использовать непосредственно OutputStream и InputStream, см пример:

@Test
public void test4() throws Exception
{
    byte[] array = {-23, -99, 38, 122, 16, 0};
    String fileName = "/tmp/test4.tmp"; // замените на ваш файл
    FileOutputStream fout = new FileOutputStream(fileName);
    fout.write(array);
    fout.close();
    FileInputStream fin = new FileInputStream(fileName);
    byte[] buf = new byte[0x100]; // буфер для чтения
    int count = fin.read(buf);
    fin.close();
    buf = Arrays.copyOf(buf, count); // копируем прочитанные байты
    assertArrayEquals(array, buf); // сравниваем с оригиналом
}
READ ALSO
не работает margin на реальном устройстве

не работает margin на реальном устройстве

Проблема: в эмуляторе студии margin работает, а вот на планшете нет, в чем может быть заковырка?

187
Как узнать “data-key” value из тега “tr” используя Selenium Webdriver + Java?

Как узнать “data-key” value из тега “tr” используя Selenium Webdriver + Java?

Мне нужно узнать "data-key" элемента в таблице("Some name" на скриншоте) который завернут в тег "td"Можно это сделать используя Selenium WD + Java?

137
Проблема при сборке проекта на Cordova

Проблема при сборке проекта на Cordova

Пишу программу на CordovaХочу запустить ее в эмуляторе

158
как сохранить изображение с камеры в bitmap

как сохранить изображение с камеры в bitmap

я новичок в androidПишу простое приложение которое транслирует камеру на surfaceView и есть кнопка при нажатии на нее должен метод вытаскивать bitmap

166