0

我在探查器下运行我的应用程序。内存消耗最多的“类”char[]在我的应用程序中约为 10 kB。

然后我创建了一个InputStreamPipedInputStream确切地说),它包含一个 300 MB 的字节数组数据。

然后我看了一下我的分析器,我没有看到任何显着的变化(看不到任何东西占用了 300 MB)。

问题是,如果 300 MB 的字节数组不在内存中,Java 将它保存在哪里?

[更新] 关于我如何获得 300 MB 的附加信息PipedInputStream

我正在开发一个具有文件上传机制的网络应用程序。在文件上传的其中一个过程中,我创建了一个输入流 ( PipedInputStream)。基本上,

  1. 我读取了多部分文件的输入流(一次几 KB 字节 []),
  2. 创建了一个PipedOutputStream
  3. 创建了一个PipedInputStream(将最近创建的输出流传递给构造函数)
  4. 将多部分的输入流写入我的PipedOutputStream(在单独的线程上运行;在退出线程之前刷新并关闭该输出流)。此时,我现在在自己的输入流中拥有了多部分字节的副本
  5. 然后(意外地)将该输入流存储在我的 http 会话中(关于这是否是一个好主意的讨论/辩论将是另一个问题)

那么问题又来了,Java 将我InputStream的内容保存在哪里(我在分析器中的任何地方都看不到它)?

[更新#2]

我有一个从文件FileOutputStream中读取PipedInputStream并写入文件的文件。

4

2 回答 2

2

APipedInputStream仅在其连接到的输出流写入数据时才使数据可用。只要您从输入流中读取数据的速度与从输出流中接收数据的速度一样快,就不会有太多数据需要缓冲。

如果这没有帮助,您将需要提供有关您正在使用管道输入流做什么的更多信息 - 它连接到什么输出流,以及从中读取什么?

编辑:你还没有说从你的PipedInputStream. 必须有一些东西,否则PipedOutputStream会阻塞 -PipedInputStream只有一个相当小的缓冲区(默认情况下)。

于 2009-01-27T11:35:03.120 回答
0

APipedInputStream根本不存储任何数据。另外,您从哪里获得 300 MB 字节数组?

于 2009-01-27T11:35:16.097 回答