【问题标题】:Problems writing to a unix pipe through Java通过 Java 写入 unix 管道的问题
【发布时间】:2010-01-31 00:58:55
【问题描述】:

我正在写入位于“/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);
 }
 }

有什么想法吗?

谢谢。

【问题讨论】:

    标签: java pipe outputstream


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 不要忘记点击答案左侧的绿色复选框来接受最佳答案。这可以通过确认该解决方案对您有效来帮助其他人。
      【解决方案3】:

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

      【讨论】:

      • @Alf - 它应该没有区别,因为 FileOutputStream 没有缓冲。 IIRC,在这种情况下,flush() 方法被实现为无操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多