Проблемы записи в канал Unix через Java - PullRequest
3 голосов
/ 31 января 2010

Я пишу в фрейм-буфер, расположенный в "/ dev / fb0". Все работает нормально, пока я не попытаюсь снова записать в канал, используя OutputStream, который вешает программу. Я решил эту проблему, закрыв поток вывода, а затем воссоздав его, но это кажется ужасно медленным и тупым.

Framebuffer.java</p> <pre><code>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 ]

2 голосов
/ 31 января 2010

Во-первых, если не происходит чего-то действительно странного, "/ dev / fb0" - это файл устройства, а не канал. [Это придирка, но если вы используете неправильную терминологию, 1) люди вас не поймут и 2) вам будет трудно искать ответы.]

Во-вторых, это выглядит как странный способ взаимодействия с кадровым буфером !!

Я подозреваю, что проблема в том, что вам нужно сделать эквивалент вызова POSIX lseek, чтобы установить позицию потока в ноль каждый раз, когда вы рисуете кадр. Я нашел два способа сделать это:

1 голос
/ 31 января 2010

Изменение выходного потока на RandomAccessFile решило все мои проблемы. Бьюсь об заклад, поток не работал, потому что он не может искать позицию 0. Спасибо всем, кто ответил.

0 голосов
/ 31 января 2010

Что если вы сбросите вывод с помощью flush (из OutputStream)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...