Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 从s3读取时,GZIPInputStream过早关闭_Java_Amazon S3_Bufferedreader_Gzipinputstream - Fatal编程技术网

Java 从s3读取时,GZIPInputStream过早关闭

Java 从s3读取时,GZIPInputStream过早关闭,java,amazon-s3,bufferedreader,gzipinputstream,Java,Amazon S3,Bufferedreader,Gzipinputstream,如果文件大于几MB,则在~100行之后创建从readLine()返回null的读取器。 在小于1 MB的gzip文件上不可复制。 有人知道如何处理这个问题吗?来自BufferedReader\readLine()的文档: 返回: 一个包含行内容的字符串,不包括任何行终止字符,,如果已到达流的结尾,则为null 我想说的很清楚这意味着什么:遇到了文件/流的结尾-没有更多的数据可用 GZIP格式的显著特点是:多个文件可以相互追加,以创建包含多个GZIP对象的更大文件。似乎gzip输入流只读取其中的第

如果文件大于几MB,则在~100行之后创建从
readLine()
返回null的读取器。 在小于1 MB的gzip文件上不可复制。
有人知道如何处理这个问题吗?

来自
BufferedReader\readLine()
的文档:

返回:

一个包含行内容的字符串,不包括任何行终止字符,,如果已到达流的结尾,则为null

我想说的很清楚这意味着什么:遇到了文件/流的结尾-没有更多的数据可用

GZIP格式的显著特点是:多个文件可以相互追加,以创建包含多个GZIP对象的更大文件。似乎
gzip输入流
只读取其中的第一个

这也解释了为什么它适用于“小文件”。这些文件只包含一个压缩对象,因此读取整个文件


注意:如果
gzip输入流
以非破坏性方式确定一个gzip文件已结束,则可以在同一
InputStream
上打开另一个
gzip输入流
,并读取多个对象。

来自
BufferedReader#readLine()
的文档:

返回:

一个包含行内容的字符串,不包括任何行终止字符,,如果已到达流的结尾,则为null

我想说的很清楚这意味着什么:遇到了文件/流的结尾-没有更多的数据可用

GZIP格式的显著特点是:多个文件可以相互追加,以创建包含多个GZIP对象的更大文件。似乎
gzip输入流
只读取其中的第一个

这也解释了为什么它适用于“小文件”。这些文件只包含一个压缩对象,因此读取整个文件


注意:如果
gzip输入流
以非破坏性方式确定一个gzip文件已结束,则可以在同一
InputStream
上打开另一个
gzip输入流
,并读取多个对象。

Hi worldssender。在我看来,这个问题对你们来说并不清楚。请仔细阅读“如果文件大于几MB,请在大约100行之后”。这不是文件的结尾。大约有7000条线路。谢谢@Denys,你在读s3Service.getObject(bucket,objectKey)你怎么知道大约有7000行?顺便说一句,行并不重要,我们讨论的是二进制数据。你能看到你是否准确地阅读了
s3Service.getObject(bucket,objectKey).getObjectMetadata().getContentLength()
bytes吗?我知道这一点,因为我是手动提取gzip的。现在我正在处理最新版本的Jet3T。我找到了根案例。gzip文件是在附加模式下生成的,GZIPOutputStream可能不支持这种模式。谢谢每一个试图帮助你的人!不幸的是,由于某些原因,我无法将此作为我问题的答案。@Denys,我在答案中添加了一句话。我想这就是你想说的?你好。在我看来,这个问题对你们来说并不清楚。请仔细阅读“如果文件大于几MB,请在大约100行之后”。这不是文件的结尾。大约有7000条线路。谢谢@Denys,你在读s3Service.getObject(bucket,objectKey)你怎么知道大约有7000行?顺便说一句,行并不重要,我们讨论的是二进制数据。你能看到你是否准确地阅读了
s3Service.getObject(bucket,objectKey).getObjectMetadata().getContentLength()
bytes吗?我知道这一点,因为我是手动提取gzip的。现在我正在处理最新版本的Jet3T。我找到了根案例。gzip文件是在附加模式下生成的,GZIPOutputStream可能不支持这种模式。谢谢每一个试图帮助你的人!不幸的是,由于某些原因,我无法将此作为我问题的答案。@Denys,我在答案中添加了一句话。我想这就是你的意思吧?
new BufferedReader(new InputStreamReader(
       new GZIPInputStream(s3Service.getObject(bucket, objectKey).getDataInputStream())))