**

java I/O流:字节流和字符流(概要及其方法)

**

IO流按照操作数据的不同可分为字节流和字符流。按照数据传输方向的不同又可以分为输入流和输出流。程序从输入流中读取数据,向输出流中写入数据。
在IO包中,字节流的输入/输出流分别用java.io.Reader和java.io.Writer表示。

- [ 一] 字节流
针对字节输入、输出提供的一系列流。 文本、图片、音频和视频都是以字节的形式存在的,因此要对这些内容进行传输就要使用字节流。
两个抽象类:InputStream(字节输入流 )、OutputStream(字节输出流)。 它们是字节流的两个顶级父类,字节输入流都是InputStream的子类,字节输出流都是OutputStream的子类。

  • InputStream的常用方法

int read() : 从输入流中读取数据的下一个字节。

int read(byte[] b): 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。

int read(byte[]b , int off,int len): 从输入流中读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目

void close() : 关闭此输入流并释放与该流关联的所有系统资源。

  • OutputStream的常用方法:

void write(int b) : 将指定的字节写入次输出流。

void write(byte[] b) : 将b.length个字节从指定的byte数组写入此输出流。

void write(byte[] b , int off ,int len) : 将指定byte数组中从偏移量off开始的len个字节写入此输出流。

void flush() : 刷新此输出流并强制写出所有缓冲的输出字节。

void close(): 关闭此输出流并释放与该流关联的所有系统资源。

注意: 输出主要方法是write 而输入的主要方法是read。

  • 字节流操作文件
    针对文件的读写,JDK专门提供了两个类 : FileInputStream和 FileOutputStream 。它们分别包括了一套是所有输入与输出需要使用的方法,可以完成最基本的读取与写出功能。
    通过FileOutputStream 向一个已经存在的文件中写入数据,该文件中的数据会被清空,如果希望追加数据,只需要在字节输入流的末尾追加一个参数值true即可。
    (注意:一旦遇到I/O异常 ,IO流的close方法将无法得到执行,流对象所占用的系统资源
    将无法释放,因此,为了保证IO流的close()方法必须执行,通常将关闭流的操作写在finally代码块里。)

字节流缓冲区:为了提高单个字节的读、写效率,可以使用字节流缓冲区,即定义一个字节数组作为缓冲区,复制文件时,可以将读取的单个字节保存到字节数组中,然后将字节数组中的数据一次性写入文件中。

字节缓冲流:提高读写效率除了使用字节流缓冲区,还可以使用java.io包中自带缓冲功能的字节缓冲流,它们分别是BufferedInputStrem 和BufferedOutputStream。这两个流在实例化的时候需要接受InputStream和OutputStream类型的对象作为参数。
例如:

BufferedInputStream bufferInput = new BudderedInputStream(new FileInputStream("source\河马.jpg"));
BufferedOutputStream bufferOutput = new BudderedOutputStream(new FileOutputStream("source\河马.jpg"));
while((lenth = bufferInput.read()) != -1){bufferOutput.write(lenth);
}

这两者提高程序指向效率几乎相同。

- [ 二] 字符流
字符流有两个抽象的顶级父类: Reader 和Writer 。 Reader是字符输入流,从某个源设备读取字符; Writer是字符输出流,用于向某个目标设备写入字符。

在程序开发中,经常需要读取文本文件的内容,如果要从文件中直接读取字符,便可以使用字符输入流FileReader,通过此流可以从关联的文件中读取一个或一组字符。

FileReader / FileWriter 用于读/写文件, BufferedReader 和 BufferedWriter 是具有缓冲功能的流 使用它们可以提高读、写效率。(注意:字符缓冲流内部使用了缓冲区,字符写入缓冲区时,当缓冲区填充不下或者调用close()方法时,缓冲区的字符才会一次性写入目标文件中。因此在循环结束时一定要调用close()方法,否则很容易会导致缓冲区的部分数据无法写入目标文件中。)

字符流Reader的常见方法:
read():读取单个字符。

read(char[] buf) :将字符读入数组。

read(char[] buf, int off, int len) : 将字符读入数组的某一部分。

read(CharBuffer target) :试图将字符读入指定的字符缓冲区。

flush() :刷新该流的缓冲。

close() :关闭此流。(需要先刷新它)

字符输出流Writer主要方法:
write(char[] buf) :写入字符数组。

write(char[] buf, int off, int len) :写入字符数组的某一部分。

write(int c) :写入单个字符。

write(String str) :写入字符串。

write(String str, int off, int len) :写入字符串的某一部分。

flush() :刷新该流的缓冲。

close() :关闭此流。(需要先刷新它)

- [ 三] 转换流
字节流和字符流相互的转换,java.io包中提供了两个类可以将字节流转换为字符流 : InputStreamReader 和 OutputStreamWriter。
使用转换流可以在一定程度上避免乱码,还可以指定输入输出所使用的字符集。
OutputStreamWriter 是Writer的子类,将一个字节输出流转换成字符输出流,方便直接写入字符。
InputStreamReader 是Reader 的子类,讲一个字节输出流转换成字符输入流,方便直接读取字符。
一般为了提高读/写效率,常通过字符缓冲流实现转换的操作。(注意:在使用转换流时,只能针对操作文本文件的字节流进行转换,如果字节流操作的是图片或者音频,此时转换为字符流就会造成数据丢失。)
OutputStreamWriter的常见方法:
flsh():刷新该流的缓冲

close():关闭此流,关闭前需要刷新

getEncoding():获取此流使用的字符编码的名称。

(1)write():write(char[] ,int offset ,int length):写入字符数组的某一部分

(2)write(String ,int offset ,int length):写入字符串的某一部分

(3)write(String ):写入单个字符

InputStreamReader的常见方法:
close(): 关闭此流

getEncoding(): 获取此流使用的字符编码的名称

ready(): 判断此流是否已经准备好用于读取

read(): 读取单个字符。

read(char[],int offset ,int length),将字符读入数组的某一部分

java I/O流:字节流和字符流(概要及其方法)相关推荐

  1. Java——I/O(字节流、字符流与转换流 )

    目录 字节流和字符流 1. 流操作流程 2. 字节输出流(OutputStream) 2.1 输出方法 3. 自动关闭支持AutoCloseable-JDK1.7 4. 字节输入流(InputSrea ...

  2. Java基础---认识IO流---字节流、字符流---缓冲流---转换流

    一.认识IO流 I/O就是用于设备之间进行数据交互的对象所属的类型 IO流的体系结构:根据分类,有四种流对象类型 字节流:可以直接操作字节信息的流对象 字节输入流:InputStream 字节输出流: ...

  3. Java I/O之字节流与字符流的区别

    字节流与字符流的区别: 上图解析: 字节输出流是直接把字节数据写出到磁盘或其他设备上,而字符输出流会先把字符输出流按一定的编码规则进行编码成二进制的字节输出流再写出到磁盘或其他设备上. 字节输入流每次 ...

  4. java精选面试题---字节流和字符流的区别

    字节流和字符流的区别 字节流读取的时候,读到一个字节就返回一个字节: 字符流使用了字节流读到一个或多个字节(中文对应的字节 数是两个,在 UTF-8 码表中是 3 个字节)时.先去查指定的编码表,将查 ...

  5. Java 常用IO流(字节流和字符流)详解

    一,简介及分类 IO流用来处理设备之间的数据传输:JAVA对数据的操作是通过流的方式:JAVA用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流. 流按操作类型分为两种: 字节流 : 字节流 ...

  6. Java文件流字节流和字符流的区别

    字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位, 字符流以字符为单位 处理对象不同:字节流能处理所有类型的文件,包括图片,视频等,而字符流只能处理字符类型的数据 字节流:一次读入 ...

  7. IO流——字节流、字符流

    在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 流的分类 ①   流按其流向分为"输入流 ...

  8. java中什么是字节流和字符流_java中字节流与字符流的区别是什么

    字节(Byte)是进行io操作的基本数据单位,在程序进行字节数据输出时可以使用OutputStream类完成 此类定义如下: public abstract class OutputStream ex ...

  9. IO流(字节流和字符流)

    IO流的分类: 按照数据流向 站在内存角度 输入流 读入数据 输出流 写出数据 按照数据类型 字节流 可以读写任何类型的文件 比如音频 视频 文本文件 字符流 只能读写文本文件 1.字节输入流的继承体 ...

  10. java byte char io流_吃透Java IO:字节流、字符流、缓冲流

    前言有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身, ...

最新文章

  1. 「每周CV论文推荐」 初学深度学习活体与伪造人脸检测必读的文章
  2. 应力循环次数60ant_循环超临界CO2对煤的孔隙结构和力学特性的影响研究
  3. java复制两个对象报异常_Java中复制两个不同类的对象的属性
  4. Python编程基础:第五十一节 将函数赋值给变量Assign Functions to Variables
  5. python快速排序最简单写法_漫画:最最最最最简单的选择排序
  6. 算法练习之leetcode两数相加(1)
  7. R 升级到 4 之后的悲剧
  8. 【vim小记】vim的复制粘贴(包括系统剪贴板)
  9. 在 IIS6 配置使用php的fastcgi模式
  10. ALL-TAG推出RFID墨水防损标签
  11. 强化学习的数学基础4---Q-Learning进阶
  12. 利用装饰器实现mock和api的局部分离切换
  13. 跟我学算法-集成算法
  14. SqlServer中获取字符串中的数字部分
  15. 18、HTML5 Video(视频)和 audio(音频)
  16. java 输入一个数四舍五入_Java程序将数字四舍五入到n个小数位
  17. MySQL笔记4——SQL去重/笛卡尔积现象
  18. 正则表达式的语法汇总
  19. Android 12刷机教程
  20. Google搜索技巧语法

热门文章

  1. 神奇的数学之回文数(不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数)
  2. Android Framework-操作系统基础
  3. 电商后台开发之商品规格组合算法
  4. Linux LCD屏幕驱动调参实操
  5. 子墨对酒《三国杀》里论模式(一)工厂模式
  6. iOS超级签名违法么?
  7. 使用navicat导入txt数据到数据库
  8. WPF 项目开发入门(一) 安装运行
  9. Vue项目启动报错解决方案
  10. 交警队门户网站管理系统-蓝色模板 v2020.7.14 专为交警队设计的一套模板,模板风格大气实用。整站布局,调整方便,适合全国各地交警内部网络和互联网建站使用。