我有这段代码:
String command = "dmidecode -t2";
try {
Process pb = new ProcessBuilder("/bin/bash", "-c", command).start();
}
catch (IOException e) {
e.printStackTrace();
}
我想将命令的输出保存到RAM(所以我只能实时使用它)。如何将输出保存到RAM中的字符串?
答案 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/