使用java时,进程输入流是否有限制?

我正在solaris OS上使用java运行时创建一个进程。 然后我从进程中获取输入流并对输入流进行读取。 我希望(我不太确定这个过程,这是第三方的事情)这个过程流程是巨大的,但它似乎被削减了。 可能是java方面有一个阈值,关于进程在其输出流中可以有多少?

谢谢,阿卜杜勒

如果您反复阅读,则可以阅读的数据量没有限制。 您不能一次读取超过2 GB的数据,某些流类型一次只能提供几KB。 例如,慢速套接字通常会给你1.5 KB或更少(基于连接的MTU)

如果调用int read(byte[]) ,则只保证读取1个字节。 假设您每次都会读取完整缓冲区是一个常见的错误。 如果需要,可以使用DataInputStream.readFully(byte[])

“过程输出流”是指STDOUT吗? STDERR? 或者你有一个OutputStream对象,你指向某个地方? (一份文件?)

如果您写入文件 – 如果不关闭输出流,则可能会看到剪切的数据。 只要你读完这本书(当你完成写作时输出stream.close())就可以了。 请注意,存在一些潜在的限制,如存储空间(显而易见)或文件系统限制(某些限制文件大小)。

如果你写STDOUT / STDERR – 据我所知你没事。 再次注意,如果您将输出写入终端或通过Eclipse(例如),那么它们可能有一个缓冲区,因此限制了您的输出(但是,最有可能的是,您将丢失数据的第一部分,不是它的最后一部分)。

如果正确实现,您不应该在InputStreamOutputStream上遇到限制。 当从输入或输出分配对象时,最可能遇到限制的资源是内存 – 例如,尝试将100GB文件读入内存然后写入输出。 如果需要将非常大的对象加载到内存中或从内存中加载,请确保使用64位JVM并尽可能多地分配内存,但测试是确定理想值的唯一方法。