之间有什么区别
byte[] buffer = new byte[1024];
// this:
if (inputStream.read(buffer) > 0) { /*...*/ }
// and:
if (inputStream.read(buffer) != -1) { /*...*/ }
两者都可以确定网络流终止吗?
答案 0 :(得分:10)
InputStream.read()
的Javadocs说:
如果
b
的长度为零,则不读取任何字节,返回0
在正常使用中,这种情况永远不会发生,因此明确地测试这种情况并没有多大意义。 (如果你想避免永远循环,因为在这种情况下缓冲区是零长度和快速失败,只需测试缓冲区的长度。)
此外,还有:
返回:读入缓冲区的总字节数,如果由于已到达流末尾而没有更多数据,则返回
-1
。
如果您要测试文件结尾(或网络流,或其他),请使用测试:
if ( inputStream.read(buffer) != -1 ) ...
非bug的Java实现永远不会返回任何其他内容,以表明没有更多数据可用。
答案 1 :(得分:2)
根据doc,inputstream.read(buffer) !=-1
会告诉您流已结束。 inputstream.read(buffer) == 0
只是说没有可用的字节可供读取,但是流仍处于活动状态(即,自上次读取所有内容以来,对等方没有发送任何内容)。
答案 2 :(得分:0)
如果您已经知道缓冲区长度不为零,则这两个表达式之间没有有效的区别。鉴于有关有效缓冲区的基本规定,可以从Postman推断出 MySQL> use databasename;
MySQL> load data local infile 'filename/filelocation.csv' into table tablename
-> fields terminated by ','
-> enclosed by '\r\n'
-> ignore 1 lines
-> (col1, col2, col3...);
将永远不会返回read
。
在输入数据可用,检测到文件结尾或引发异常之前,此方法将一直阻塞。