Java - 在没有磁盘的情况下处理内存中的文件 R/W

Posted

技术标签:

【中文标题】Java - 在没有磁盘的情况下处理内存中的文件 R/W【英文标题】:Java - processing file in memory without the disk R/W 【发布时间】:2014-05-20 20:04:57 【问题描述】:

我正在通过套接字接收文件 并将它们保存到数据库中。

所以,我正在接收字节流并传递它 到后端进程,比如 Process1 用于数据库保存。

我希望在不保存的情况下执行此操作 磁盘上的流。所以,而不是存储传入的流 作为磁盘上的文件,然后将该文件传递给Process1, 我希望在它还在记忆中的时候通过它。 这是为了消除耗时的磁盘读写。

我可以做的一种方法是将 byte[] 传递给 Process1。 我想知道是否有更好的方法来做到这一点。

TIA。

【问题讨论】:

保存在ByteArrayOutputStream?但它当然会吃掉堆空间 @fge 会调查它——似乎是我正在寻找的东西。为我处理 byte[] 长度 n (?) 确实会,是的。堆饿了,但它会 把它写成 ans & 我会接受它。 【参考方案1】:

您可以使用ByteArrayOutputStream。本质上,它是一个可增长的byte[],您可以随意写入,即在可用堆空间的限制内。

在写入/刷新/关闭它之后(尽管最后两个操作本质上是空操作,这不是放弃理智做法的理由),您可以使用此类的 .toByteArray() 获取底层字节数组。

【讨论】:

【参考方案2】:

Socket 听起来像您正在寻找的东西。

【讨论】:

他已经有一个 Socket:“我正在通过 socket [...] 接收文件”

以上是关于Java - 在没有磁盘的情况下处理内存中的文件 R/W的主要内容,如果未能解决你的问题,请参考以下文章

应该在没有磁盘容器的情况下使用 Berkeley DB XML?

什么情况下用内存数据库

df 报告磁盘使用情况,但在共享内存 /dev/shm 中没有文件

在没有用户交互的情况下从我的 Sandbox 应用程序将文件写入磁盘的何处?

linux 查看CPU内存 网络 流量 磁盘 IO

SQLite 如何变成 内存数据库