博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
read和readFully的区别! .
阅读量:6965 次
发布时间:2019-06-27

本文共 880 字,大约阅读时间需要 2 分钟。

给你看些代码!你就明白是怎么回事了!其实内部有进行判断,但是并没有进行处理!

而是直接抛出了异常!一下是JDK 的源代码:

public void readFully(byte[] b, int off, int len, boolean copy)            throws IOException        {            while (len > 0) {                int n = read(b, off, len, copy);                if (n < 0) {                    throw new EOFException();                }                off += n;                len -= n;            }        }

从这里不难看出!这里对异常并没有处理!而是直接抛出异常!
这里还要注意的一个问题就是其实 readFully和read的区别。
readFully方法并不是说一下就把整个文件读完了,不用去管是否到达文件末尾的异常。
readFully只是在读取数据的时候,会一直把缓冲区读满,否则一直处于阻塞状态而等待读取。
而read方法只是将字节流中的数据读完。那么数据在TCP协议传送的过程中,可能输入流接受到的数据并不完全,只是其中的一部分。而如果这时候的缓冲区没有满的话,readFully将会继续等待。知道缓冲区装满。

某些时候!你可能需要读出特定的长度的字段。比如一些数据的头信息之类的!

这时候如果你用read去读,那么可能还没有读完就个你返回来了。
但是如果去用readFully读,那么就会完整的给你读出来。
但是在更多的时候,如果不是确定要用特定长度的数据。还是用read去读。
用readFully有点危险。

 

转载于:https://www.cnblogs.com/yangzhi/archive/2012/10/16/3576623.html

你可能感兴趣的文章
如何使用Bro IDS和Intel Critical Stack分析网络活动
查看>>
Memcached的Web管理工具MemAdmin(待实践)
查看>>
嵌入式学习难点 嵌入式软件学习
查看>>
11204 ASM 在线存储迁移。
查看>>
eclipse不会自动编译的问题解决
查看>>
linux netstat命令
查看>>
淘宝卖家遭恶退诈骗 阿里一年来协助警方抓获103人
查看>>
拥2180亿美元收入,苹果成全球最大IT企业
查看>>
数据库连接池的工作原理
查看>>
网络抓包工具wireshark and tcpdump 及其实现基于的libpcap
查看>>
市值410亿美元!VR内容在5年后将成下一座金矿
查看>>
easyui的combobox根据后台数据实现自动输入提示功能
查看>>
ASP.NET MVC WEB API必知必会知识点总结
查看>>
Test2 unit6
查看>>
sql注入<二>
查看>>
26、OSPF配置实验之不规则区域虚链路
查看>>
[C++再学习系列] 引用和指针
查看>>
未能加载文件或程序集“********”或它的某一个依赖项。试图加载格式不正确的程序。...
查看>>
bootstrap4-图像
查看>>
Centos7 MariaDB10.1.22编译安装
查看>>