2016-08-31 2 views
2

Я ищу несколько StringIO -подобный класс, который позволяет мне писать и читать одновременно из разных частей моей программы.
С одной части программы я хочу написать (добавить) символы в буфер, из другой части, которую я хочу прочитать.Ruby StringIO для одновременного чтения и записи

Проблема с StringIO заключается в следующем:

buffer = StringIO.new 
buffer.write "Foobar"  # Write to the buffer 
buffer.rewind    # Move the pointer to beginning 
buffer.getc    #=> F 
buffer.getc    #=> o 

buffer.write("something") # Write more to the buffer 
buffer.string    #=> Fosomething 
buffer.getc    #=> nil 
buffer.pos     #=> 11 

Всякий раз, когда я пишу в буфер, он записывается в текущую позицию. При перемещении позиция перемещается к последним записанным символам.

Что мне нужно, это StringBuffer с двумя отдельными позициями для чтения и записи вместо одного. Что-то вроде этого существует в рубине или мне нужно делать это самостоятельно?

+0

Мутирование общей переменной по потокам не является детерминированным в МРТ. – Anthony

ответ

1

Вам следует рассмотреть возможность использования Queue. Если вам не нужна безопасность потоков, тогда простой массив тоже может быть прекрасен.

+0

Использование очередей кажется хорошей идеей. Я попробую это. – 0xAffe

+0

Я согласен с этим ответом, потому что это может быть хорошим способом для других, даже жестким он не работает для меня. Я выполняю переводчик, и иногда интерпретатор ожидает большего ввода. В этом случае я просто попрошу пользователя ввести больше ввода. Очереди не работали, потому что мой read-thread будет умирать, если очередь пуста. – 0xAffe

Смежные вопросы