小编gre*_*ryp的帖子

Java InputStream读取方法为NFS安装位置中的文件返回ASCII"NUL"字符

我有一个Java进程,它使用Java RandomAccessFile读取给定文件,并根据文件内容进行一些处理.此文件是一个日志文件,由另一个java进程更新.读取该文件的java进程位于另一台计算机上,并具有NFS挂载设置以访问远程服务器中的文件.基本上,读取文件的进程将根据RandomAccessFile的文件长度和位置轮询文件中的更改,并为遇到的每个字节调用处理程序方法.问题是我有时会从RandomAccessFile读取方法返回ASCII'NUL'字符

int charInt = read();
Run Code Online (Sandbox Code Playgroud)

也就是说,charInt在某些情况下返回0,并在一段时间后返回有效字符.但后来我错过了流中的人物正在阅读NULs

我尝试使用http://commons.apache.org/io/apidocs/org/apache/commons/io/input/Tailer.html,我收到了每行的通知.但是在这些行中我有时会注意到ASCII NUL字符.我已经通过unix/linux的Java IO实现中的跟踪"tail -f" - 我的java进程类似,但后来我开始认为问题在于NFS挂载或者一些bug的java IO在尝试读取时来自NFS安装.我从普通文件(不在NFS挂载中)执行了一些测试读取,并且有一个连续写入它的进程.所有这些测试都是成功的.我也试过java BufferedReader,因为文件流实际上是一个字符流,即使我可以把它当作字节流.我仍然得到NUL角色.

不确定这是否重要 - NFS挂载是一个只读(ro).感谢任何帮助.谢谢.

我也尝试了以下内容:

FileWriter fileWriter;
    try {
        fileWriter = new FileWriter("<OUT_FILE>", true);
    } catch (IOException e) {
        throw new RuntimeException("Exception while creating file to write sent messages ", e);
    }
    BufferedWriter bufWriter = new BufferedWriter(fileWriter);

    Runtime r = Runtime.getRuntime();
    Process p = r.exec("tail -f <PATH_TO_IN_FILE>");
    Scanner s = new Scanner(p.getInputStream());
    while (s.hasNextLine()) {     
        String line = s.nextLine(); 
        bufWriter.write(line);
        bufWriter.write(System.getProperty("line.separator")); …
Run Code Online (Sandbox Code Playgroud)

java io nfs file tail

4
推荐指数
1
解决办法
2556
查看次数

标签 统计

file ×1

io ×1

java ×1

nfs ×1

tail ×1