InputStream的available()能否用来判断当前流是否读取到文件

读取minio中的文件的时候,通过以下代码。

InputStream inputStream = minioClient.getObject(minio_bucketNameExam,fileurl);

而我想做的事情是在读取完了以后判断一下

inputStream.available()

是否等于0,如果等于0的话,就判断没有从minio中读取到数据,如果大于0的话就判断已经读取到minio中的数据。

那么这样做对不对呢?
知道解决问题后我才知道不能这样去判断,当然也不是绝对的,如果你是循环一行一行的去读,也可以使用这个方法,首先来说一下available()这个方法的作用:

该方法的描述是这样的:
返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数.返回一个整数值,来获取还有多少字节可以读取

如上,由于是从网络中获取数据,由于存在着网络延迟等因素,所以可能获取的长度是错误的。也就是每次得到的数字可能不一样

当然,如果是读取本地文件的话,这个方法返回的数据大小一般是真实的。因此,如何使用以及要不要用这个方法,得根据具体的场景

为什么有的时候已经读取到数据,返回值还是0呢?
这个方法在进行网络操作时往往出错,因为你调用available()方法时,对发发送的数据可能还没有到达,你得到的count是0。
也有可能一次就读取完了,根本没有下一次,那下一次获取的数据肯定也是0。

猜你喜欢

转载自blog.csdn.net/qq_42584411/article/details/103769961