Java:同一文件上的FileOutputStream和FileInputStream

时间:2019-07-07 09:31:28

标签: java android

我可以打开文件(Linux字符设备)以进行读写操作,并使用这两个类来实现诸如客户端-服务器之类的对话框吗?

类似这样的东西:

File file = new File("/dev/ttyS0");  
FileOutpuStream fo = new FileOutputStream(file)
FileInputStream fi = new FileInputStream(file)

以上声明之后,我可以连续向该文件发送轮询(问题)并阅读其答复吗? (当然,连接到ttyS0的是一种服务器)

3 个答案:

答案 0 :(得分:3)

我无法对其进行测试,但是您可能想尝试RandomAccessFile。 它没有给您创建流的操作性,但是它实现了DataInput和DataOutput。那也许足以满足您的目的? RandomAccessFile docs

String file = "/dev/ttyS0";
try {
    RandomAccessFile f = new RandomAccessFile(file, "rwd");
} catch (IOException e){
    e.printStackTrace();
}

答案 1 :(得分:0)

/dev/ttyS0文件是用于串行终端的设备文件。

如果已将设备正确配置为连接到串行终端线,则您应该能够像这样进行读写。但是,在典型的台式机或笔记本电脑上,由于没有连接的串行线,因此可能无法正常工作。

(例如,当我在PC上执行此操作时:

$ sudo bash -c "cat < /dev/ttyS0"

我明白了:

cat: -: Input/output error

这表示无法读取该设备。)

请注意,/dev/tty*设备的行为不同于常规文件。以任何方式写入的字符都与您读回的字符无关。另请注意,无法使用标准Java API发出ioctl请求。因此,从Java配置终端驱动程序会出现问题。


如果您正在阅读和编写常规文件,那也应该可以。但是,这种行为可能会造成混乱,尤其是在流中有缓冲的情况下。您需要处理的一个问题是两个文件描述符彼此独立。

如果您需要对常规文件执行此类操作,则应使用RandomAccessFile

答案 2 :(得分:0)

我没有尝试过RandomAccessFile,它也可以工作...它可以与FileInputStream和FileOutputStream一起正常工作,请参见以下答案:https://stackoverflow.com/a/56935267/7332147