代码之家  ›  专栏  ›  技术社区  ›  beta

通过Java编写UNIX管道的问题

  •  3
  • beta  · 技术社区  · 15 年前

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

    有什么想法吗?

    谢谢。

    3 回复  |  直到 11 年前
        1
  •  2
  •   Stephen C    15 年前

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

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

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

        2
  •  1
  •   beta    15 年前

    将输出流更改为randomaccessfile修复了我的所有问题。我敢打赌,流不起作用,因为它找不到位置0。感谢所有回复的人。

        3
  •  0
  •   Aif    15 年前

    如果你用 flush (来自OutputStream)?