运行bash命令并将输出保存到ram内存

时间:2017-05-01 08:36:23

标签: java linux bash

我有这段代码:

String command = "dmidecode -t2";   

try {
        Process pb = new ProcessBuilder("/bin/bash", "-c", command).start();
    } 
catch (IOException e) {
    e.printStackTrace();
}

我想将命令的输出保存到RAM(所以我只能实时使用它)。如何将输出保存到RAM中的字符串?

2 个答案:

答案 0 :(得分:0)

使用Process#getOutputStream()Process#getInputStream()Process#getErrorStream()之一提供所有相关信息流。

您不应该关心它们是否保存在RAM中:您可以在进程仍在运行时读取stdout。

答案 1 :(得分:-1)

您可以使用类sun.misc.Unsafe,它可以让您直接使用JVM内存 它的构造函数是私有的,所以你可以得到一个像这样的不安全的实例:

public static Unsafe getUnsafe() {
    try {
            Field f = Unsafe.class.getDeclaredField("theUnsafe");
            f.setAccessible(true);
            return (Unsafe)f.get(null);
    } catch (Exception e) { /* ... */ }
}

然后,您可以使用以下内容获取字符串字节:

 byte[] value = []<your_string>.getBytes()
 long size = value.length

您现在可以分配内存大小并在RAM中写入字符串:

long address = getUnsafe().allocateMemory(size);
getUnsafe().copyMemory(
            <your_string>,      // source object
            0,              // source offset is zero - copy an entire object
            null,           // destination is specified by absolute address, so destination object is null
            address, // destination address
            size
); 
// the string was copied to off-heap 

来源:https://highlyscalable.wordpress.com/2012/02/02/direct-memory-access-in-java/