[重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别
[重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别
Read 读入方法
read():
一般是这种形式
public int read()
1.从流数据中读取的是一个一个字节(byte)
2.返回的是字节的(0-255)内的字节值
3.连续读取 读入一个就移动游标到下一个位置继续读取 读取到结尾返回-1 表示结束
4.如果不支持标记 则不可重复读
一般用于连续读取
代码示例
BufferedInputStream bis=……int i=0;while((i=bis.read())!=-1){//处理……}
read(byte[] bytes)
一般是这种形式
public int read(byte b[])
1.从读取流读取指定长度的字节,如果比如文件总共是102个字节
2.我们定义的数组长度是10,那么默认前面10次都是读取10个长度
最后一次不够十个,那么读取的是2个,剩余部分是填充的 '0’
3.这十一次读取,每次都是放入10个长度的数组.
一般用于带缓冲读取 可以加快读取速度
代码示例
BufferedInputStream bis=……byte[] bytes=new byte[4096];int i=0;while((i=bis.read(bytes))!=-1){//处理……}
read(byte[] bytes,int off ,int len)
一般是这种形式
public int read(byte b[], int off, int len)
1.从读取流读取一定数量的字节,如果比如文件总共是102个字节
2.我们定义的数组长度是10,但是这里我们写**read(bytes,0,9)**那么每次往里面添加的(将只会是9个长度),就要读12次,最后一次放入3个.
3.所以一般读取流都不用这个而是用上一个方法:read(byte[]);
Write 写出方法
write(int i);
public void write(int b)
直接往流写入字节形式的(0-255)int值.
write(byte[] bytes);
public void write(byte b[])
往流里边写入缓冲字节数组中的所有内容, 数组有效内容不足整个数组长度 剩余的填充值’0’ 也会被写入到输出流
所以一般写入不用此方法 而用下面那个方法 和Read刚好是反的
write(byte[] bytes,int off,int len);
public void write(byte b[], int off, int len)
1.这个是更严谨的写法,在外部定义len,然后每次len都等于流往数组中存放的长度
2.如上述read(bytes),前面每次都放入十个,第十一次放入的是2个,如果用第二种write(bytes),将会写入输出流十一次,每次写入十个长度,造成后面有8个空的,比原来的内容多了
3.所以用write(byte[] bytes,int off,int len);就不会出现多出来的空的情况,因为最后一次len不同
示例
FileInputStream fileInputStream = ……;byte[] buffer = new byte[buffersize];int len = 0;while (-1 != (n = input.read(buffer))) {output.write(buffer, 0, len);}
总结
所以除非文件很小 可以直接使用直接读写
通常情况小都使用缓存式读写
- 完整代码示例
BufferedInputStream bis = ……BufferedOutputStream bous=……byte[] bytes = new byte[4096];int len = 0;while (-1 != (len = bis.read(bytes))) {bous.write(bytes,0,len);}
[重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别相关推荐
- 【程序员养成之路】Java基础篇 8-流进流出的IO流(二)
以下内容若有误,欢迎私信我或在下方留言,谢谢^_− 目录 IO流(二) 1.特殊操作流 1.1 标准流 1.2 打印流 1.3 对象序列化流 1.4 Properties 拓展1:比较字节流和字节缓冲 ...
- Java基础(二):集合、IO流(Zip压缩输入/输出流等)、File文件类、反射、枚举
Java基础(一):编译和解释.数据类型.变量作用域.String常用方法.数组.面向对象.异常 Java基础(二):集合.IO流(Zip压缩输入/输出流等).File文件类.反射.枚举 Java异常 ...
- Java基础-Java中常用的锁机制与使用
Java基础-Java中常用的锁机制与使用 锁lock或互斥mutex是一种同步机制,主要用于在存在多线程的环境中强制对资源进行访问限制.锁的主要作用为强制实施互斥排他以及并发控制策略.锁一般需要硬件 ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/p/9 ...
- Java基础-JAVA中常见的数据结构介绍
Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 转载于:https://www.cnblogs.com/yinzhengji ...
- Java基础——Java多继承的三种实现方式
Java基础--Java"多继承"的三种实现方式 Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承&quo ...
- Java基础----Java编程语言概述
Java基础----Java编程语言概述 文章目录 Java基础----Java编程语言概述 Java编程语言概述 1-1 软件开发介绍 1.1软件开发介绍 1.2 常用命令 1-2 计算机编程语言介 ...
- JAVA基础--JAVA SE(知识点总结 Ⅴ )
前面内容请见: JAVA基础–JAVA SE(知识点总结 Ⅰ ) JAVA基础–JAVA SE(知识点总结 Ⅱ ) JAVA基础–JAVA SE(知识点总结 Ⅲ ) JAVA基础–JAVA SE(知识 ...
最新文章
- N-LTP:基于预训练模型的中文自然语言处理平台
- 「SAP技术」SE16和SE16N修改后台表数据方法
- Master RenderMan Procedural Primitive DSO
- 我是非计算机专业学生,非计算机专业学生怎么走上计算机技术之路?
- HDU 2128 Tempter of the Bone II BFS
- 吴恩达机器学习笔记11-梯度下降法实践2-学习率
- CTF web题 wp:
- 20 个强大的 Sublime Text 插件
- mysql查询不超过19_mysql45讲 19.为什么我只查一行的语句,也执行这么慢?
- 数据质量管理有哪些方法
- java servlet JSP 区别_servlet和jsp的区别
- 用canvas画一个刮刮卡
- 马云和卫哲:从不屑到仰慕 从朋友到诀别
- 悉尼大学计算机科学与技术专业,墨尔本大学和悉尼大学计算机专业选哪个好?...
- 17届华为杯数学建模大赛B题代码
- jpg图片转换成pdf文件,方法步骤
- Elasticsearch 响应数据压缩功能详解
- java-php-python-ssm校园疫情防控管理系统计算机毕业设计
- vivado约束BANK电平冲突
- 分享:Web 网页设计规范