NIO 是不是在使用 /dev/shm 中的小型序列化流时也能提供优势?

Posted

技术标签:

【中文标题】NIO 是不是在使用 /dev/shm 中的小型序列化流时也能提供优势?【英文标题】:Does NIO deliver advantages even on consuming small serialized Stream from /dev/shm?NIO 是否在使用 /dev/shm 中的小型序列化流时也能提供优势? 【发布时间】:2013-05-06 21:10:05 【问题描述】:

例如有一些应用程序(在我的 src 控件之外)会生成成千上万的序列化 Map 实例,这些实例存储为 /dev/shm/some Map-ID.ser 。它们使用普通的旧 java.io.* 包进行序列化。

我的 src 控件中的代码(用于反序列化 Map 实例)是否可以从使用 NIO 而不是普通的旧 java.io.* 包中受益?或者,理论上,鉴于这些 IO 操作都在 /dev/shm 上,是否任何 NIO 优势都可以被认为可以忽略不计?

private Map<Integer,String> deserializeMapFrKernelSHM(String shmKey) 
    Map<Integer,String> retM = null;
    try 
        FileInputStream frKernelSHM = new FileInputStream("/dev/shm/"+shmKey+".ser");
        ObjectInputStream in = new ObjectInputStream(frKernelSHM);
        retM = (Map<Integer,String>) in.readObject();
        System.out.println("Linux IPC shmop(GET) de-serialized Map<K,V> from /dev/shm/"+shmKey+".ser");
    catch (Exception e) 
        e.printStackTrace();
    
    return(retM);

【问题讨论】:

【参考方案1】:

不是真的。将对象序列化与 NIO 结合起来几乎是不可能的。

您可以尝试在 FileInputStream 周围使用 BufferedInputStream。

【讨论】:

以上是关于NIO 是不是在使用 /dev/shm 中的小型序列化流时也能提供优势?的主要内容,如果未能解决你的问题,请参考以下文章

/tmp 与 /dev/shm 用于 Linux 上的临时文件存储?

浅析/dev/shm

为啥我可以使用 POSIX 创建比 /dev/shm 上安装的大小更大的共享内存?

linux下修改/dev/shm tmpfs文件系统大小

linux下修改/dev/shm tmpfs文件系统大小

linux下的/dev/shm/及对Oracle 的影响