繁体   English   中英

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

[英]Is there a limit on process input stream when using java?

我在solaris操作系统上使用java运行时创建进程。 然后,我从流程中获取输入流,并对输入流进行读取。 我期望(我不太确定此过程,这是第三者的事情)该过程的外部流很大,但似乎受到了限制。 Java方面是否可能有一个阈值来确定一个进程的输出流中可以包含多少个?

谢谢阿卜杜勒

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

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

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

“过程输出流”是指STDOUT? STDERR? 还是您有一个直接指向某个地方的OutputStream对象? (一份文件?)

如果写入文件-如果不关闭输出流,则可能会看到剪切的数据。 只要您照看本书(写完后就使用outputstream.close()),您就可以进行。 请注意,存在一些潜在的限制,例如存储空间(明显)或文件系统限制(某些限制文件大小)。

如果您写入STDOUT / STDERR,据我所知,您还可以。 再次注意,如果将输出写入终端或通过Eclipse(例如),则它们可能具有缓冲区并因此限制了输出(但是,很可能会丢失第一部分数据,并且而不是最后一部分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM