使用java.io高效地序列化本机java数组

使用java.io高效地序列化本机java数组,java,arrays,performance,serialization,native,Java,Arrays,Performance,Serialization,Native,我想问一下java.io的高效序列化。主要在计算时间方面是有效的。将本机数组(如long[]、int[]、short[]等)序列化和反序列化到磁盘的最快方法是什么 我的阵列大小介于100mb到600mb之间。我能做的当然是在out.writeInt(…)和out.readInt(…)的情况下使用我的扩展流,但我想一定有一种更快的(缓冲的)方式,因为我知道我是在一个完整的数组中读取的 我所知道的是,框架给了我一个数据输入,可以将它转换为InputStream。其余部分由我的框架处理 提前感谢, E

我想问一下java.io的高效序列化。主要在计算时间方面是有效的。将本机数组(如long[]、int[]、short[]等)序列化和反序列化到磁盘的最快方法是什么

我的阵列大小介于100mb到600mb之间。我能做的当然是在out.writeInt(…)和out.readInt(…)的情况下使用我的扩展流,但我想一定有一种更快的(缓冲的)方式,因为我知道我是在一个完整的数组中读取的

我所知道的是,框架给了我一个数据输入,可以将它转换为InputStream。其余部分由我的框架处理

提前感谢,


Eeth

不幸的是,对于数据输入为readLong等的每种类型,只能使用一种方法

如果您可以使用内存映射文件和本机字节排序,那么在所有方面都会更加高效

在我之前的测试中,使用内存映射ByteBuffer(使用本机字节排序)读取
long
比使用DataInputStream快6倍

事实上,从ByteBuffer解析文本比使用DataInputStream读取二进制文件要快P


不幸的是,对于数据输入为readLong等的每种类型,只能使用一种方法

如果您可以使用内存映射文件和本机字节排序,那么在所有方面都会更加高效

在我之前的测试中,使用内存映射ByteBuffer(使用本机字节排序)读取
long
比使用DataInputStream快6倍

事实上,从ByteBuffer解析文本比使用DataInputStream读取二进制文件要快P


如果您不想坚持使用Java序列化,对于这个特定的用例,Ascii序列化听起来也不错

决定一种简单的数据格式,并使用一个缓冲的Writer/Reader进行序列化/反序列化。我打赌这将比使用Java序列化更快


此外,您还可以看到序列化的数据。

如果您不想继续使用Java序列化,对于这个特定的用例,Ascii序列化听起来也不错

决定一种简单的数据格式,并使用一个缓冲的Writer/Reader进行序列化/反序列化。我打赌这将比使用Java序列化更快


此外,您还可以看到序列化数据。

外部数据格式是预先指定的还是您可以控制它?您还没有真正定义问题。能否提供一些性能数字(每秒I/O数)?这可能是因为无论你的速度如何都是可以的,但是如果没有关于你的问题的数据,我们怎么知道呢。我没有时间,但不会有多大用处。(这里是SSD,其他人有其他东西等)我只是想知道是否有更有效的方法来存储完整的本机java阵列。aix:我得到的只是一个输入流,我不知道外部数据格式。。。这是我的问题。我只是得到一个数据输入,想写数组。外部数据格式是预先指定的还是您可以控制它?您还没有真正定义问题。能否提供一些性能数字(每秒I/O数)?这可能是因为无论你的速度如何都是可以的,但是如果没有关于你的问题的数据,我们怎么知道呢。我没有时间,但不会有多大用处。(这里是SSD,其他人有其他东西等)我只是想知道是否有更有效的方法来存储完整的本机java阵列。aix:我得到的只是一个输入流,我不知道外部数据格式。。。这是我的问题。我只是得到一个数据输入,想写数组,所以没有办法克服这个问题?首先手动将我的whatever[]转换为byte[],然后用write(byte[])写入它有意义吗?如果您的数据输出没有任何缓冲,这会有所帮助。但是我假设你会使用缓冲。所以没有办法克服这个问题?首先手动将我的whatever[]转换为byte[],然后用write(byte[])写入它有意义吗?如果您的数据输出没有任何缓冲,这会有所帮助。然而,我假设您将使用缓冲。