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 中没有文件