簡體   English   中英

輸入/輸出流:流結束?

[英]Input/Output Stream : End of Stream?

我一直想知道:流的結束是什么?

在java.io包中的大多數readLine方法的javadoc中,您可以讀到“如果到達流的末尾,則返回null” - 盡管我從未實際獲得null,因為大多數流(在網絡的情況下)我經常使用的流)只是阻止程序執行,直到將某些內容寫入遠程端的流中

有沒有辦法以實際的非例外投擲方式強制執行這種行為? 我只是好奇......

想想正在閱讀的文件。 那里有一個流的結尾,文件的結尾。 如果你試圖超越它,你就是不能。 如果您有網絡連接,如果您只是等待發送更多數據,則無需成為流的結尾。

在文件的情況下,我們知道沒有更多的數據需要讀取。 在網絡流的情況下,我們(通常)不這樣做。

當沒有更多數據可用時阻止FileReader ,當存在時喚醒:簡單的答案是: 你不能 根本區別在於您主動讀取文件,但是當您收聽網絡流時,您會被動地閱讀。 當某些東西來自網絡時,您的硬件會向操作系統發送一個信號,然后操作系統將新數據提供給您的JVM,然后JVM喚醒您的進程以讀取新數據(可以這么說)。 但我們沒有文件,至少不是立即。

一種可能的解決方法是為您擁有的StreamReader創建一個包裝器,並在更改文件時通知一個偵聽器,然后喚醒您進一步閱讀。 在Java 7中,您可以使用WatchService

我從來沒有真正得到一個null,因為大多數流(在我經常使用的網絡流的情況下)只是阻止程序執行,直到某些東西寫入遠程端的流

不會。你從來沒有得到過null,因為對等體從未關閉過連接。 這就是“流的結束”的意思。 這並不意味着“暫時不再有數據”。

在某些時候,套接字將被關閉,並且不能再通過該流發送數據。 這是當InputStream通過從read()返回-1及其重載來發出EOF信號時。 這種狀態是不可逆轉的。 那條小溪已經死了。

簡單地阻止開放流上的更多數據不是EOF條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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