3 Stimmen

Probleme beim Schreiben in eine Unix-Pipe durch Java

Ich schreibe in einen Framebuffer, der sich auf "/dev/fb0" befindet. Alles funktioniert gut, bis ich versuche, mit einem OutputStream erneut in die Pipe zu schreiben, was das Programm zum Stillstand bringt. Ich habe das Problem gelöst, indem ich den OutputStream geschlossen und dann neu erstellt habe, aber das scheint furchtbar langsam und stumpf zu sein.

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);
 }
 }` 

Irgendwelche Ideen?

Gracias.

2voto

Stephen C Punkte 665668

Erstens ist "/dev/fb0" eine Gerätedatei und keine Pipe, es sei denn, es liegt etwas wirklich Seltsames vor. [Das ist zwar nur ein Erbsenzähler, aber wenn Sie die falsche Terminologie verwenden, werden Sie 1) von den Leuten nicht verstanden und 2) haben Sie Schwierigkeiten, nach Antworten zu suchen.]

Zweitens sieht das nach einer seltsamen Art aus, mit einem Framebuffer zu interagieren!!

Ich vermute, dass das Problem darin besteht, dass Sie das Äquivalent eines POSIX lseek aufrufen, um die Stream-Position jedes Mal auf Null zu setzen, wenn Sie einen Rahmen zeichnen. Ich habe zwei Möglichkeiten gefunden, dies zu tun:

1voto

beta Punkte 517

Das Ändern des Output-Streams in RandomAccessFile hat alle meine Probleme behoben. Ich wette, der Stream funktionierte nicht, weil er die Position 0 nicht ansteuern kann. Danke an alle, die geantwortet haben.

0voto

Aif Punkte 10605

Was passiert, wenn Sie Ihre Ausgabe mit [Spülen](http://java.sun.com/j2se/1.5.0/docs/api/java/io/OutputStream.html#flush()) (von OutputStream)?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X