java - 通过 Java 写入 unix 管道的问题

标签 java pipe outputstream

我正在写入位于“/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 调用等效的操作,以便在每次绘制帧时将流位置设置为零。我找到了两种方法来做到这一点:

关于java - 通过 Java 写入 unix 管道的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2170132/

相关文章:

java - Android EffectFactory 位图

java - 反射 - 使用未知数量的构造函数参数获取未知类的新实例

java - 如何在 Eclipse 中调试应用程序的入口点方法?

c - 在命名管道和 popen 方面需要帮助

java - 如何使用 Spring 验证密码

Angular/如何获取api返回数据

shell - 如何在grep中转义管道字符?

c# - Azure Functions 使用两个输出 blob 调整 blob 大小

java - 简单的 Java 服务器/客户端不工作?

java - FileOutputStream 与 OutputStream,为什么以及何时?