我正在写入位于“/dev/fb0”的帧缓冲区。一切正常,直到我尝试使用挂起程序的 OutputStream 再次写入管道。我已经通过关闭输出流然后重新创建它来解决这个问题,但这看起来非常缓慢和生硬。
Framebuffer.java
public class Framebuffer extends Autobuffer {
私有(private) FileOutputStream out = null;
私有(private)文件管道=空;
公共(public)帧缓冲区(){
super (320、240);
}
公共(public)帧缓冲区(文件管道){
super (320、240);
尝试 {
out = new FileOutputStream(管道);
} catch (FileNotFoundException e){
e.printStackTrace();
}
this.pipe = 管道;
}
public void sync() 抛出 IOException {
out.write(getBytes());
关闭();
out = new FileOutputStream(管道);
}
}
有什么想法吗?
谢谢。
最佳答案
首先,除非发生了非常奇怪的事情,“/dev/fb0”是一个设备文件而不是管道。 [这是一个吹毛求疵的问题,但如果您使用了错误的术语,1) 人们将无法理解您的意思,并且 2) 您将难以找到答案。]
其次,这看起来是一种与帧缓冲区交互的奇怪方式!!
我怀疑问题在于您需要执行与 POSIX lseek
调用等效的操作,以便在每次绘制帧时将流位置设置为零。我找到了两种方法来做到这一点:
使用 RandomAccessFile而不是 OutputStream/FileOutputStream,并调用 seek(long)寻找文件。
调用FileOutputStream.getChannel() , 然后使用 position(long)寻找文件。
关于java - 通过 Java 写入 unix 管道的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2170132/