head
работы также:
head -c 100 file # returns the first 100 bytes in the file
.. извлечет первые 100 байтов и возвратит их.
то, Что хорошо об использовании head
для этого, то, что синтаксис для tail
соответствия:
tail -c 100 file # returns the last 100 bytes in the file
Я сам никогда не пробовал, но то, что вы делаете, кажется неправильным. Каналы Linux по определению работают в порядке очереди (FIFO). Следовательно, вы должны иметь возможность читать байты только в том же порядке, в котором вы их записали, а не случайным образом. Я бы посоветовал вместо этого использовать обычный файл
, и он должен работать нормально.
Насколько мне известно, конвейеры не обрабатываются каким-либо специальным образом в Java. Вы просто открываете файл для записи и записываете в него.
Вы не можете действительно «перезаписать» что-либо в конвейере, так как вы не можете искать в конвейере. По той же причине RandomAccessFile
не самый разумный выбор для использования (поскольку канал явно не файл с произвольным доступом). Я бы предложил вместо этого использовать FileOutputStream
.
Также обратите внимание, что read ()
не гарантирует чтение, пока буфер не заполнится! Он также может читать один байт, и вам необходимо проверить его возвращаемое значение и, возможно, выполнить цикл для чтения полного буфера.
Я думаю, что вы, возможно, не промываетесь после записи, поэтому часто выполняйте OutputStream.flush (), и чтение может быть байтовым, по крайней мере, чтобы увидеть, проходят ли ваши данные. например, чтобы начать с открытия именованного канала в режиме только для чтения (FileInputStream) в process1, откройте его в режиме записи (FileOutputStream) в process2, чтобы все, что вы пишете в process2, будет прочитано в process1.
также читает
http: //www.tldp.org/LDP/lpg/node15.html
http://www.unixguide.net/unix/programming/2.10.5.shtml
http://www.unixguide.net/ unix / programming / 2.10.6.shtml