Java FileInputStream限制为65535字节

时间:2016-02-27 00:06:41

标签: java aix fileinputstream

我有一个打开fileInputStream的程序,读取它并将其写入输出流。

我正在使用AIX。

当我从终端运行时,我没有任何问题。但是,当我的第三方应用程序运行它时,遇到一个问题,即FileInputStream只读取文件中的第一个65535字节,然后下一次调用.read()函数返回-1,即使文件略大于65535字节(它是68372字节)。这会导致截断的输出文件。

我的问题是,什么可能导致这种限制?它似乎不是FileInputStream的固有限制。我怀疑有一个java选项被设置在某处,但我不能为我的生活决定在哪里。这可能是某种操作系统限制吗?

这是我的基本代码:

OutputStream lOut = new FileOutputStream("/home/fileOut.txt");
FileInputStream fIn = new FileInputStream(new File("/home/fileIn.txt"));
int ch;
byte[] buf = new byte[65536];

while((ch = fIn.read(buf)) > 0)
{
    lOut.write(buf);
}

fIn.close();
lOut.close();

1 个答案:

答案 0 :(得分:2)

暂且不说您的测试代码已被破坏;请参阅@ EJP的评论。 (是的。他>>是<<正确。相信我/他。)

  

我的问题是,什么可能导致这种限制?

AFAIK,没有这样的限制。

  

它似乎不是FileInputStream的固有限制。

没有。

  

我怀疑某个地方有一个java选项,但我不能确定在哪里确定。

没有JVM选项会导致此行为 1

  

这可能是某种操作系统限制吗?

理论上是的。或者它可能是文件系统驱动程序中的错误/限制,"资源限制" (请参阅" man ulimit")或存储介质错误。实际上,所有这些解释都不太可能。但是你可以通过尝试阅读...或使用已知可以工作的OS实用程序复制...相同的文件来确认这个问题。

实际上,我怀疑真正的问题是您尝试使用的第三方应用程序 2 中的错误。它可能与您的测试代码中的错误或类似错误类似。

1 - 略有夸大其词。如果第三方应用程序做了非常愚蠢(即捕获和压缩Throwable),那么理论上将堆大小设置得太小可能导致"导致"这种行为。如果您遇到类似问题,请尽快更换供应商!

2 - 为了清楚起见,第三方应用程序"是一个写的应用程序&由第三方提供。您/您的组织是第一方,您的JVM供应商是第二方......