我可以打开文件(Linux字符设备)以进行读写操作,并使用这两个类来实现诸如客户端-服务器之类的对话框吗?
类似这样的东西:
File file = new File("/dev/ttyS0");
FileOutpuStream fo = new FileOutputStream(file)
FileInputStream fi = new FileInputStream(file)
以上声明之后,我可以连续向该文件发送轮询(问题)并阅读其答复吗? (当然,连接到ttyS0的是一种服务器)
答案 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