Java 使用FilterInputStream对象读取大数据的优雅方式
我从函数中获取一个Java 使用FilterInputStream对象读取大数据的优雅方式,java,amazon-web-services,amazon-s3,large-files,java-io,Java,Amazon Web Services,Amazon S3,Large Files,Java Io,我从函数中获取一个FilterInputStream对象作为返回类型。现在,我将作为流获取的文件是一个日志文件。所以我认为它可以是一个大文件。所以我不想一次读取所有数据。但在循环中读取数据是一项乏味的工作 我需要在每个换行符处进行拆分,这意味着文件中的数据是以行分隔的格式。在公共int read(byte[],int off,int len)中使用恒定大小的字节数组,因为它会导致许多情况。我不想马上读它,因为它可能很大 有没有一种优雅的方法可以做到这一点 注:我特别指的是扩展自FilterInp
FilterInputStream
对象作为返回类型。现在,我将作为流获取的文件是一个日志文件。所以我认为它可以是一个大文件。所以我不想一次读取所有数据。但在循环中读取数据是一项乏味的工作
我需要在每个换行符处进行拆分,这意味着文件中的数据是以行分隔的格式。在公共int read(byte[],int off,int len)中使用恒定大小的字节数组
,因为它会导致许多情况。我不想马上读它,因为它可能很大
有没有一种优雅的方法可以做到这一点
注:我特别指的是扩展自
FilterInputStream
,它具有read()
功能。将BufferedReader
包裹在InputStreamReader
包裹在FilterInputStream
周围,并调用readLine()。
好的,对不起,下一层就到了,您可以使用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();
并确保在InputStreamReader中指定编码。我不知道“下一层”是什么意思
StringUtil.isBlank()
不一定是停止读取文件的有效原因,但在对其执行任何其他操作之前,确实需要检查每个readLine()
结果是否为null。变量名应该是data,
或line,
而不是date。
此代码不会读取整个文件-1.