2015-01-04 2 views
0

Я пытаюсь реализовать программу tail и хочу напечатать последние n байтов файла. Я использовал переменную RandomAccessFile для хранения данных из текстового файла. Когда я пытаюсь извлечь данные и распечатать его на консоль, я получаю что-то вроде этого:Извлечение данных из байта Array

-n1 
65109710979710979710810979710810510510979710910659711010510979711410011897114107109797114100119111108102106597114111110 

Как правильно на извлечение данных из массива байтов?

Это мой код:

RandomAccessFile raf = new RandomAccessFile(file, "r"); 
      byte[] b = new byte[n]; 
      raf.readFully(b, 0, n); 
      for (int i = 0; i < n; i++) { 
       System.out.print(b[i]); 
      } 
+0

Просьба представить код, который производит этот результат. –

+0

Вместо этого попробуйте 'System.out.println (b [i])'. Это запустит новую строку для каждого номера. Это то, что вы хотите? –

+0

Файл, который я читаю, представляет собой текстовый файл со словами в нем. Следовательно, я ожидаю, что некоторые слова будут записаны на консоль. Я не понимаю, почему эти цифры печатаются –

ответ

2

Вы печатаете значение byte. Для преобразования, например, массив байтов в виде String, что вы можете печатать на System.out.println попробовать следующее:

System.out.println(new String(b)); 

Если вы хотите, чтобы преобразовать каждый byte (как в цикле) к печати char вы можете сделать следующее преобразование:

for (int i = 0; i < 10; i++) { 
    char c = (char) (b[i] & 0xFF); 
    System.out.print(c); 
} 

A byte - это просто один байт размером (8 бит), тогда как char в Java i 16 бит (2 байта). Поэтому напечатанные байты не имеют смысла, это не полный характер.

См. this link для получения дополнительной информации.

Смежные вопросы