2016-04-11 9 views
1

У меня есть файл, который содержит строку, за которой следуют байты, содержащие двоичные числа, закодированные в них.Как декодировать байты из файла, содержащего строки в java?

Thisisastring. �J 

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

StringBuffer buffer = new StringBuffer(); 
    File file = new File(arg); 
    FileInputStream in = new FileInputStream(file); 
    InputStreamReader isr = new InputStreamReader(in, "UTF8"); 
    Reader inn = new BufferedReader(isr); 
    int ch; 

    while ((ch = inn.read()) > -1){ 
     buffer.append((char)ch); 
    } 

    inn.close(); 

    String content = buffer.toString(); 
    String temp = new String(); 
    for(int i=0; i<content.length(); i++){ 
     temp += content.charAt(i); 
     if(content.charAt(i) == ' '){ 
      while(i != content.length()-1){ 
       i++; 
       byte b = (byte) content.charAt(i); 
       String x = Integer.toString(b & 0xFF, 2); 
       System.out.println(x); 
      } 
     } 
    } 

Результаты:

11111101 <- Why is only this one incorrect? 
11000 
1001010 
1011 

Что ожидается:

10010101 
00011000 
01001010 
1011 

ответ

1

Вы не должны использовать Readers или Strings для двоичных данных.

StringBuffer buffer = new StringBuffer(); 
File file = new File(arg); 
FileInputStream in = new FileInputStream(file); 
DataInputStream dis = new DataInputStream(new BufferedInputStream(in)); 
int ch; 

while ((ch = din.read()) > -1){ 
    buffer.append((char)ch); 
    if (ch == ' ') 
    { 
     // next byte is a binary value 
     byte b = din.readByte(); 
     String x = Integer.toString(b & 0xFF, 2); 
     System.out.println(x); 
    } 
} 

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

  • Нет связанных вопросов^_^