我运行了我用下的一个分析器。该"类"具有最多的存储的消耗是的 char[] 其大约10kB在我的应用程序。

然后我创造了一个 InputStream (PipedInputStream 确切)它拥有一个字节的阵列数据的300兆。

然后我看了看我的分析器,并且我看不到任何明显的改变(不见任何东西吃了300MB)。

问题是,如果这300兆字节阵列是不是在存储器,其中是Java保持它?

[新] 额外信息在我的300兆到我的 PipedInputStream:

我正在开发一个网应用程序,有一个文件上传机构。在一个进程在我的文件上载,我创建一个投入流(PipedInputStream).基本上,

  1. 我读了multipartfile的输入流(几KB字节[]在一个时间),
  2. 创建了一个 PipedOutputStream
  3. 创建了一个 PipedInputStream (通过最近成立的输出流到constructor)
  4. 写了多部分的投入流向我 PipedOutputStream (上运行的一个分离线程;其冲并关闭,输出流在退出之前的螺纹)。 在这一点上,我现在有一个副本分段的字节在我自己的输入流
  5. 然后(不小心)存储,输入流在我http届会议(讨论/讨论那是否是个好主意会是在一个不同的问题)

这样的问题,然后再是,这里是Java保持我的 InputStream's的内容(我没看到在任何地方我的profiler)?

[更新#2]

我有一个 FileOutputStream 这读 PipedInputStream 写一个文件。

有帮助吗?

解决方案

一个 PipedInputStream 只是使用数据时,它的书面通过输出流,这是连接。所以,只要你继续读自己的输入流作为快,因为它接收到的数据输出流,不会有太多的数据对缓冲区。

如果没有帮助,则需要得到更多的信息你正在做什么与通过管道输入流-什么流输出为它连接,并且有什么阅读它吗?

编辑: 你还没说什么读取你的 PipedInputStream.我们必须,否则 PipedOutputStream 会块 PipedInputStream 只有一个相当小的缓冲区(通过默认)。

其他提示

一个 PipedInputStream 不存储的任何数据。还有,你在哪里得到那300兆字节列从?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top