3

我正在写入位于“/dev/fb0”的帧缓冲区。一切正常,直到我尝试使用挂起程序的 OutputStream 再次写入管道。我已经通过关闭输出流然后重新创建它来解决这个问题,但这似乎非常缓慢和生硬。

Framebuffer.java

public class Framebuffer extends Autobuffer {
private FileOutputStream out = null;
private File pipe = null;

public Framebuffer() {
   super(320, 240);
}

public Framebuffer(File pipe) {
   super(320, 240);
   try {
      out = new FileOutputStream(pipe);
   } catch (FileNotFoundException e) {
   e.printStackTrace();
  }
 this.pipe = pipe;
 }

 public void sync() throws IOException {
   out.write(getBytes());
   out.close();
   out = new FileOutputStream(pipe);
 }
 }

有任何想法吗?

谢谢。

4

3 回答 3

2

首先,除非发生了非常奇怪的事情,否则“/dev/fb0”是一个设备文件而不是管道。[这是一个挑剔,但如果你使用错误的术语,1)人们不会理解你和 2)你将难以寻找答案。]

其次,这看起来像是一种与帧缓冲区交互的奇怪方式!

我怀疑问题在于lseek每次绘制帧时您都需要执行相当于 POSIX 调用的操作以将流位置设置为零。我找到了两种方法来做到这一点:

于 2010-01-31T02:49:55.827 回答
1

将输出流更改为 RandomAccessFile 解决了我的所有问题。我敢打赌,该流无法正常工作,因为它无法寻求位置 0。感谢所有回复的人。

于 2010-01-31T07:10:42.197 回答
0

如果你用flush(来自OutputStream)刷新你的输出怎么办?

于 2010-01-31T01:19:57.570 回答