簡體   English   中英

Java:同一文件上的FileOutputStream和FileInputStream

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM