![](/img/trans.png)
[英]Reading and writing into the same file with FileInputStream and FileOutputStream
[英]Java: FileOutputStream and FileInputStream together on the same file
是否可以打開文件(Linux字符設備)進行讀寫操作,並使用這兩個類來實現諸如客戶端-服務器之類的對話框?
像這樣:
File file = new File("/dev/ttyS0");
FileOutpuStream fo = new FileOutputStream(file)
FileInputStream fi = new FileInputStream(file)
在上述聲明之后,我可以連續向文件發送輪詢(問題)並閱讀其答復嗎? (當然,附加到ttyS0的是一種服務器)
我無法對其進行測試,但是您可能想嘗試一下RandomAccessFile
。 它沒有給您創建流的操作性,但是它實現了DataInput和DataOutput。 那也許足以滿足您的目的? RandomAccessFile文檔
String file = "/dev/ttyS0";
try {
RandomAccessFile f = new RandomAccessFile(file, "rwd");
} catch (IOException e){
e.printStackTrace();
}
/dev/ttyS0
文件是串行終端的設備文件。
如果已將設備正確配置為連接到串行終端線,則您應該能夠像這樣進行讀寫。 但是,在典型的台式機或筆記本電腦上,由於沒有連接的串行線,因此可能無法正常工作。
(例如,當我在PC上執行此操作時:
$ sudo bash -c "cat < /dev/ttyS0"
我得到這個:
cat: -: Input/output error
表示無法讀取該設備。)
請注意, /dev/tty*
設備的行為與常規文件不同。 以任何方式寫入的字符都與您讀回的字符無關。 還要注意,不可能使用標准Java API發出ioctl
請求。 因此,從Java配置終端驅動程序會出現問題。
如果您正在閱讀和編寫常規文件,那也應該可以。 但是,這種行為可能會造成混亂,尤其是在流中有緩沖的情況下。 您需要處理的一個問題是兩個文件描述符彼此獨立。
如果您需要使用常規文件執行此類操作,則應使用RandomAccessFile
。
我沒有嘗試過RandomAccessFile,它也可以工作...它可以與FileInputStream和FileOutputStream一起正常工作,請在SO中查看以下答案: https : //stackoverflow.com/a/56935267/7332147
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.