2013-09-16 1 views
0

Я получаю объект FilterInputStream как возвращаемый тип функции. Теперь файл, который я получаю как поток, является файлом журнала. Поэтому я думаю, что это может быть большой файл. Поэтому я не хочу читать данные сразу. Но чтение данных в цикле - это утомительная работа.элегантный способ чтения больших данных с помощью объекта FilterInputStream

Мне нужно разделить каждую строку новой строки, то есть данные в файле находятся в формате, отделенном от строки. С массивом байтов с постоянным размером, который будет использоваться в public int read(byte[], int off, int len), поскольку это приведет к возникновению многих случаев. Я не хочу читать его сразу, потому что он может быть большого размера.

Есть ли элегантный способ сделать это.

P.S .: Я в особенности ссылаюсь на S3ObjectInputStream, продленный от FilterInputStream, который имеет функцию read().

ответ

2

Оберните BufferedReader вокруг InputStreamReader вокруг FilterInputStream и вызвать readLine().

+2

И не забудьте указать кодировку в InputStreamReader. – Kayaman

-1

ОК, я извиняюсь, на следующем этаже прав, вы можете использовать класс BufferedReader, он имеет метод ReadLine, и он возвращает строку вместо байтового массива. Точно так же

BufferedReader reader = new BufferedReader(new FileReader(new File("the file path"))); 
String date = reader.readLine(); 
if(!StringUtil.isBlank(date)){ 
    //reade the file line by line 
    date = reader.readLine(); 
} 
reader.close(); 
+0

Я не знаю, что означает «следующий этаж». 'StringUtil.isBlank()' не обязательно является допустимой причиной для прекращения чтения файла, но вам нужно проверить * каждый * 'readLine()' результат для null, прежде чем делать что-либо еще с ним. Имя переменной должно быть 'data,' или 'line,' not 'date.' Этот код не читает весь файл. -1 – EJP

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

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