Tcp 使用while循环从不可靠的IO流(如互联网)读取时会发生什么情况?

Tcp 使用while循环从不可靠的IO流(如互联网)读取时会发生什么情况?,tcp,inputstream,iostream,networkstream,Tcp,Inputstream,Iostream,Networkstream,我被告知,当从任何IO源(例如硬盘上的文件或Internet URL)读取时,程序可能会从某种输入流对象中读取数据,从而允许它每次提取N个字节(或一行文本),直到没有剩余的字节 当我寻找一些源代码时,我通常会发现如下内容: fh = open('my_text_file.txt') while True: line = fh.readline() print(line) if not line: break fh.close() 或 这些代码通常使用wh

我被告知,当从任何IO源(例如硬盘上的文件或Internet URL)读取时,程序可能会从某种输入流对象中读取数据,从而允许它每次提取N个字节(或一行文本),直到没有剩余的字节

当我寻找一些源代码时,我通常会发现如下内容:

fh = open('my_text_file.txt')
while True:
    line = fh.readline()
    print(line)
    if not line:
        break
fh.close()

这些代码通常使用while循环,持续读取n字节或一行,直到流对象没有返回任何内容为止。我可以理解,当从本地IO源(例如硬盘驱动器)读取文件时,文件流通常非常可靠,因此在文件完成之前,流中始终存在下一个可用字节


我的问题是,如果输入流是不可靠的源怎么办?e、 g.互联网。在这种情况下,while循环将一直从流中读取字节或行,直到没有任何返回。但是,当它不读取任何内容时,它如何知道它实际上是文件的结尾,而不仅仅是因为网络拥塞?即使是现在的大多数网络都使用可靠的协议,例如TCP,它将保证文件在最后是完整的。但是,即使使用TCP,也不能保证文件的各个部分会及时到达,让read()函数读取一些内容,以防止while循环在文件结束之前中断?我只是好奇这些输入流对象在非常低级的意义上是如何工作的。

它们不是,它们是高级抽象

如果套接字断开连接或驱动器在您通过steam读取时崩溃,则读取将失败,返回特定值或引发异常

while ((line = br.readLine()) != null) {
    System.out.println(line);
}