Java FileInputStream 限制为 65535 字节

标签 java aix 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();

最佳答案

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

My question is, what can cause this limitation?

据我所知,没有这样的限制。

It doesn't appear to be an intrinsic limit of FileInputStream.

没有。

I suspect there is a java option being set somewhere but I can't for the life of me determine where.

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

Could this be an OS limitation somehow?

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

<小时/>

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

<小时/>

1 - 有点夸大其词。如果第 3 方应用程序做了一些非常愚蠢的事情(即捕获并挤压 Throwable),那么将堆大小设置得太小在理论上可能会“导致”这种行为。如果您遇到这样的问题,请尽快更换供应商!

2 - 需要明确的是,“第三方应用程序”是由第三方编写和提供的应用程序。您/您的组织是第一方,您的 JVM 供应商是第二方...

关于Java FileInputStream 限制为 65535 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35663963/

相关文章:

java - IBM AIX 上的定制 JCE 提供程序

android - 在 Android 中指定 XML 文件的文件夹路径

java - 在java中读取日志文件

java - 如何获取过滤器中包含的url

java - Android媒体录制错误启动失败-19 runTimeException

unix - unix中子进程的nohup

c - 如何从 AIX 上的 native 代码调用系统函数?

java - 如何读取文本文件中的特定单词并使用条件语句执行某些操作

java - 这个比较器是如何工作的?

java - Web 应用程序中的 Spring beans 作用域。最佳实践