使用FilterInputStream对象读取大数据的优雅方式

时间:2013-09-16 09:20:22

标签: java amazon-web-services amazon-s3 large-files java-io

我从函数中获取一个FilterInputStream对象作为返回类型。现在我将作为流获取的文件是一个日志文件。所以我认为它可以是大文件。所以我不想一次读取所有数据。但是,循环读取数据是一项繁琐的工作。

我需要在每个换行符处拆分,这意味着文件中的数据采用行分隔格式。在public int read(byte[], int off, int len)中使用一个恒定大小的字节数组,因为它会引起很多情况。我不想立刻阅读它,因为它可能很大。

是否有一种优雅的方式来做到这一点。

P.S。:我特别提到从FilterInputStream扩展的S3ObjectInputStream,其中read()具有{{1}}功能。

2 个答案:

答案 0 :(得分:2)

BufferedReader周围的InputStreamReader周围换FilterInputStream并致电readLine().

答案 1 :(得分:-1)

好的,对不起,下一层是对的,你可以使用BufferedReader类,它有一个名为readLine的方法,它返回一个String对象而不是一个字节数组。就像这样

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();