![](/img/trans.png)
[英]Locking an XLSX file for reading and writing with FileInputStream, FileOutputStream, and RandomAccessFile
[英]Is Java FileInputStream Locking File for writing
我正在两个独立的程序之间建立一个快速的桥梁。
一个程序写入文件,而我的程序同时从中读取。
似乎一旦我打电话给第一次阅读,写作就完全被阻止了。
为什么会发生这种情况?解决方法是什么?
// Create Named Pipe
Runtime.getRuntime.exec("mkfifo /tmp/mypipe")
val stream = new FileInputStream("/tmp/mypipe")
val in = new BufferedReader(new InputStreamReader(stream))
// File opened for reading. No blocking at this point.
while (true) {
println(in.readLine())
// File read. Now blocking.
}
更新:
该文件实际上是使用mkfifo /tmp/mypipe
创建的命名管道。 我尝试使用常规File
,它工作得很好 - 显示所有数据。
我使用命名管道因为我不想要磁盘IO开销。
如果我不得不打赌,我会说这是一个缓冲问题。
最初我以为BufferedReader
可能会尝试填充它的整个缓冲区,但只要它读了一些就看起来很开心。 请参阅fill()
方法。
如果您正在使用readLine()
,那么还有一个问题是您获得的输入是否包含换行符。
根据源程序产生的输出量,可能发生的另一件事是管道缓冲。 这个答案会有帮助吗? 您也可以尝试结束源程序(例如^C
等),然后查看目标程序是否打印任何内容。
此页面表明缓冲可能是一个问题:
但是,如果使用缓冲写入,则在刷新缓冲区之前,缓冲区不可供读取器使用。 当缓冲区写入的数据超过最大缓冲区大小(stdio.h中设置的BUFSIZ)时,或者当写入程序关闭管道时,会发生此刷新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.