首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataInputStream.read() vs DataInputStream.readFully()

DataInputStream.read() vs DataInputStream.readFully()
EN

Stack Overflow用户
提问于 2014-09-18 02:17:09
回答 2查看 21.5K关注 0票数 15

我正在制作一个简单的TCP/IP套接字应用程序

这样做有什么不同:

代码语言:javascript
复制
DataInputStream in = new DataInputStream(clientSocket.getInputStream());

byte[] buffer = new byte[100];
in.readFully(buffer);

而不是这样做:

代码语言:javascript
复制
DataInputStream in = new DataInputStream(clientSocket.getInputStream());

byte[] buffer = new byte[100];
in.read(buffer);

我看过文档,它们有相同的描述。readFully()read(),所以我能假设它是一回事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-18 04:48:13

DataInput.readFully(byte[] b)的Javadoc声明:

从输入流中读取一些字节并将它们存储到缓冲区数组b中。读取的字节数等于 b.的长度

DataInputStream.read(byte[] b)的Javadoc声明:

从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。此方法会一直阻塞,直到输入数据可用、检测到文件结尾或抛出异常

基本上,readFully()将准确地读取b.length字节,而read()将读取最多b.length,或者更少,只要输入流可用。

票数 17
EN

Stack Overflow用户

发布于 2018-02-12 03:14:29

使用 read 时,您需要检查返回值,以了解实际读取了多少字节

代码语言:javascript
复制
byte[] buffer = new byte[100];
if (in.read(buffer) < 100){
   // fail
   }

取而代之的是readFully,如果不能读取100个字节,就会抛出一个IOException,不需要检查返回值,简化一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25897627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档