2016-03-04 2 views
1

Я создал объект InputStream из файла и InputStreamReader из этого.Использование InputStream и InputStreamReader в то же время в java

InputStream ips = new FileInputStream("c:\\data\\input.txt"); 
InputStreamReader isr = new InputStreamReader(ips); 

Я в основном читать данные в виде байтов в буфер, но когда приходит время, когда я должен читать в гольцов я буду «режим переключения» и читать с InputStreamReader

byte[] bbuffer = new byte[20]; 
char[] cbuffer = new char[20]; 

while(ips.read(buffer, 0, 20)!=-1){ 
    doSomethingWithbBuffer(bbuffer); 
    // check every 20th byte and if it is 0 start reading as char 
    if(bbuffer[20] == 0){ 
     while(isr.read(cbuffer, 0, 20)!=-1){ 
      doSomethingWithcBuffer(cbuffer); 
      // check every 20th char if its # return to reading as byte 
      if(cbuffer[20] == '#'){ 
       break; 
      } 
     } 
    } 
} 

является это безопасный способ чтения файлов с смешанными данными с символом и байтом?

ответ

2

нет, это не безопасно. InputStreamReader может считывать «слишком много» данных из базового потока (он использует внутренние буферы) и повреждает вашу попытку чтения из базового потока байтов. Вы можете использовать что-то вроде DataInputStream, если хотите смешать символы чтения и байты.

Альтернативно, просто прочитайте данные в виде байтов и используйте правильную кодировку символов для преобразования этих байтов в символы/Строки.

+0

Не используйте 'readLine()' DataInputStream', поскольку он отмечен как устаревший с JDK 1.1 – Kalsan

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