Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FilterInputStream对象读取大数据的优雅方式_Java_Amazon Web Services_Amazon S3_Large Files_Java Io - Fatal编程技术网

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.