Java 如何使用ObjectOutputStream为大量自定义对象编写数据块
我正在用Java中的ObjectOutputStream编写一个巨大的自定义对象列表 代码片段如下,我的问题是ObjectOutputStream的用法Java 如何使用ObjectOutputStream为大量自定义对象编写数据块,java,Java,我正在用Java中的ObjectOutputStream编写一个巨大的自定义对象列表 代码片段如下,我的问题是ObjectOutputStream的用法 我应该使用BufferedOutputStream而不是ObjectOutPutStream来提高循环中写入操作的性能吗?或者是否有一种方法可以使用数据块写入ObjectOutputStream,以及如何在for循环中调用flush()? 谢谢你的时间 protected void writeTransferObject(List<? e
我应该使用BufferedOutputStream而不是ObjectOutPutStream来提高循环中写入操作的性能吗?或者是否有一种方法可以使用数据块写入ObjectOutputStream,以及如何在for循环中调用flush()? 谢谢你的时间
protected void writeTransferObject(List<? extends DataTransfer> dataTransferList,
HttpServletResponse response)
{
try (ObjectOutputStream oos = new ObjectOutputStream(response.getOutputStream()))
{
for ( DataTransfer dataTransfer : dataTransferList)
{
oos.writeObject(dataTransfer);
}
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
protectedvoid writeTransferObject(List首先,针对您的性能问题:Java的运行速度总是比磁盘写入速度快,因此在Java中进行优化没有多大意义
第二:输入/输出缓冲区:只有在执行低效的读/写操作时才需要这些缓冲区:例如,在读端,逐行读取,而不仅仅是狼吞虎咽地读取字节;在写端,在作为一个I/O操作发送之前,从多个位置写入碎片
第三:ObjectOutputStream:我强烈建议不要使用ObjectOutputStream(和DataOutputStream),并推荐Jackson/JSON或XML作为替代。ObjectOutputStream仅限Java,依赖于所有序列化对象来合理实现可序列化,并且对类定义中的更改非常敏感。如果使用流而不是列表
,则可能可以提高性能。列表
它的所有对象同时都在RAM中-如果RAM不足,那么操作系统开始交换内存,这需要大量CPU时间。这为攻击者打开了一扇大门。只需谷歌搜索“java漏洞可序列化类”,你就会找到很多解释。