[重学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流中几种不同的读写方法的区别相关推荐

  1. 【程序员养成之路】Java基础篇 8-流进流出的IO流(二)

    以下内容若有误,欢迎私信我或在下方留言,谢谢^_− 目录 IO流(二) 1.特殊操作流 1.1 标准流 1.2 打印流 1.3 对象序列化流 1.4 Properties 拓展1:比较字节流和字节缓冲 ...

  2. Java基础(二):集合、IO流(Zip压缩输入/输出流等)、File文件类、反射、枚举

    Java基础(一):编译和解释.数据类型.变量作用域.String常用方法.数组.面向对象.异常 Java基础(二):集合.IO流(Zip压缩输入/输出流等).File文件类.反射.枚举 Java异常 ...

  3. Java基础-Java中常用的锁机制与使用

    Java基础-Java中常用的锁机制与使用 锁lock或互斥mutex是一种同步机制,主要用于在存在多线程的环境中强制对资源进行访问限制.锁的主要作用为强制实施互斥排他以及并发控制策略.锁一般需要硬件 ...

  4. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/p/9 ...

  5. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  6. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 转载于:https://www.cnblogs.com/yinzhengji ...

  7. Java基础——Java多继承的三种实现方式

    Java基础--Java"多继承"的三种实现方式 Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承&quo ...

  8. Java基础----Java编程语言概述

    Java基础----Java编程语言概述 文章目录 Java基础----Java编程语言概述 Java编程语言概述 1-1 软件开发介绍 1.1软件开发介绍 1.2 常用命令 1-2 计算机编程语言介 ...

  9. JAVA基础--JAVA SE(知识点总结 Ⅴ )

    前面内容请见: JAVA基础–JAVA SE(知识点总结 Ⅰ ) JAVA基础–JAVA SE(知识点总结 Ⅱ ) JAVA基础–JAVA SE(知识点总结 Ⅲ ) JAVA基础–JAVA SE(知识 ...

最新文章

  1. N-LTP:基于预训练模型的中文自然语言处理平台
  2. 「SAP技术」SE16和SE16N修改后台表数据方法
  3. Master RenderMan Procedural Primitive DSO
  4. 我是非计算机专业学生,非计算机专业学生怎么走上计算机技术之路?
  5. HDU 2128 Tempter of the Bone II BFS
  6. 吴恩达机器学习笔记11-梯度下降法实践2-学习率
  7. CTF web题 wp:
  8. 20 个强大的 Sublime Text 插件
  9. mysql查询不超过19_mysql45讲 19.为什么我只查一行的语句,也执行这么慢?
  10. 数据质量管理有哪些方法
  11. java servlet JSP 区别_servlet和jsp的区别
  12. 用canvas画一个刮刮卡
  13. 马云和卫哲:从不屑到仰慕 从朋友到诀别
  14. 悉尼大学计算机科学与技术专业,墨尔本大学和悉尼大学计算机专业选哪个好?...
  15. 17届华为杯数学建模大赛B题代码
  16. jpg图片转换成pdf文件,方法步骤
  17. Elasticsearch 响应数据压缩功能详解
  18. java-php-python-ssm校园疫情防控管理系统计算机毕业设计
  19. vivado约束BANK电平冲突
  20. 分享:Web 网页设计规范

热门文章

  1. carsim中质心加速度_carsim输入、输出常用变量
  2. 原反补码的相互转换、补码加减法计算规则及例题
  3. python爬取每日一文meiriyiwen.com
  4. [FineReport]图表运用之-世界地图
  5. Android 应用链接详解
  6. 微生物如何影响我们的生活
  7. 解决 win10 无法安装VS2019,visual studio installer下载进度始终为0
  8. 蒸米ROP_X86学习总结
  9. Java Thread 源码解析
  10. C:1102火车票退票费计算(函数专题)