字节流与字符流的区别:


字节流与字符流的区别:

所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。

  字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

字节流是最基本的,包括InputStream和OutputStream,主要用在处理二进制数据,它是按字节来处理的。但实际中很多的数据是文本,于是又提出了字符流的概念,通过 InputStreamReader,OutputStreamWriter来进行。

字节流:

① FileOutputStream :往文件中写入的时候传入的参数只能是Unicode编码,也就是99——c。

这样子。

FileOutputStream fos=new FileOutputStream("ieda_test\\src\\IO\\fos.txt");
byte[]  b={91,92,93,99};
byte[]  a="abcdef".getBytes();
fos.write(b,0,b.length);

② FileInputStream :读取文件中的数据的时候,读取出来的也是编码对应的字节,如c——99。

FileInputStream fis=new FileInputStream("ieda_test\\src\\IO\\fos.txt");//读取数据
int by=fis.read();
System.out.println(by);
System.out.println((char)by);

也可以使用字节数组byte[]来一次读取一个字节数组

FileInputStream fis=new FileInputStream("ieda_test\\src\\IO\\fos.txt");byte[] bys=new byte[1024];//一次读取1024个字符数组int len;while((len=fis.read(bys))!=-1){//fis.read(bys)将fis中的内容读取出来存入bys中,为空就等于-1System.out.println(new String(bys,0,len));}

③ BufferedInputStream,BufferedOutputStream

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

BufferedInputStream中的参数为FileInputStream
BufferedOutputStream中的参数为FileOutputStream

字符流:
① OutputStreamWriter、InputStreamWriter

FileOutputStream fos=new FileOutputStream("ieda_test\\src\\IO\\fos.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos);
osw.write(99);
osw.flush();

OutputStreamWriter 中的参数是FileOutputStream对象。
FileWriter说是OutputStreamWriter的简写,实际上却不然,OutputStreamWriter中的参数是FileOutputStream对象,FileWriter中的参数是文件路径。

FileWriter fw=new FileWriter("ieda_test\\Copy.java");
FileReader fr=new FileReader("ieda_test\\src\\IO\\IODemo01.java");

与字符流的区别是, OutputStreamWriter写入文件可以写入字符串也可以写入编码
如:

FileOutputStream fos=new FileOutputStream("ieda_test\\src\\IO\\fos.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos);
osw.write(99);
osw.write("99");
osw.flush();

fox.txt中

②BufferedReader、BufferedWriter

BufferedReader、BufferedWriter中的参数为FileReader、FileWriter或OutputStreamReader、InputStreamWriter。

BufferedReader br=new BufferedReader(new FileReader("ieda_test\\src\\IO\\fos.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("ieda_test\\src\\IO\\fos.txt"));

等同于

BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("ieda_test\\src\\IO\\fos.txt")));
BufferedReader br=new BufferedReader(new FileReader(new OutputStreamWriter(new FileInputStream("ieda_test\\src\\IO\\fos.txt")));
BufferedReader br1=new BufferedReader(new FileReader("ieda_test\\src\\IO\\fos.txt"));
BufferedReader br2=new BufferedReader(new InputStreamReader(new FileInputStream("ieda_test\\src\\IO\\fos.txt")));

同样是封装文件中的数据为BufferReader对象,这里就可以看出来FileReader和InputStreamReader虽然是同级,但是参数不同,且FileReader更方便一些。

BufferedReader、BufferedWriter可以用于将字节流封装为字符流

①字节流由文件输入

BufferedReader br2=new BufferedReader(new InputStreamReader(new FileInputStream("ieda_test\\src\\IO\\fos.txt")));

②字节流由键盘录入

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

等级(个人排序,方便记忆)
BufferedWriter > FileWriter =OutputStreamWriter > BufferedInputStream > FileOutputStream

IO流总结——字节流与字符流的区别相关推荐

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

    ** java I/O流:字节流和字符流(概要及其方法) ** IO流按照操作数据的不同可分为字节流和字符流.按照数据传输方向的不同又可以分为输入流和输出流.程序从输入流中读取数据,向输出流中写入数据 ...

  2. java 笔记(4) —— java I/O 流、字节流、字符流

    Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...

  3. IO流、字节流和字符流

    Java 一.IO流 1.1 概念 1.2 分类 1.3 IO流的父类 二.字节流 2.1 概念 2.2 OutputStream 2.2.1 常用方法 2.2.2 FileOutputStream类 ...

  4. Java总结IO篇之字节流与字符流转化

    本篇接上篇:Java中的字符流,流的读写的细节参考上篇 本篇讲述字节流相关话题,包括字节流的读取与写出,字节流转化为字符流 1.明确是否是纯文本:纯文本 ? 字符流: 字节流 2.明确数据来源( 输入 ...

  5. java中I/O流之字节流和字符流学习总结

    一.基本内容 如果要进行文件内容的操作那么必须依靠数据流完成,而数据流分为两种:   字节流:InputStream(字节输入流).OutputStream(字节输出流):   字符流:Reader( ...

  6. java-IO流(2)-字节流和字符流的介绍

    目录 1字节流 1.1字节输入流:InputStream 1.1.1基类声明 1.1.2核心方法 1.1.3FileInputStream:文件输入流 1.2字节输出流:OutputStream 1. ...

  7. IO流,字节流和字符流

    一.概述 IO流用来处理设备之间的数据传输 上传文件和下载文件 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 二.IO流的分类: (1)流向:         输入流 读取 ...

  8. IO流(字节流、字符流)

      字节流的基类为: InputStream 和 OutputStream :字符流的基类为:Reader 和 Writer .他们的子类命名都以这写基类为后缀名,下面为大家具体介绍一下这几种类的使用 ...

  9. 无法在流的结尾之外进行读取_IO流,字节流,字符流

    IO流 输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是"读",读取外部数据). 输出(Output)指的是:程序输出数据给外部系统从而可以操作外部系统(核心含义 ...

最新文章

  1. 网络流最大流 Dinic算法模板
  2. mockito_Mockito:无法实例化@InjectMocks字段:类型是接口
  3. Silverlight Telerik RadGridView动态增删行及行列操作(转载)
  4. #1415 : 后缀数组三·重复旋律3 (最长公共子串)
  5. 在.Net中使用log4Net
  6. ASP.NET企业开发框架IsLine FrameWork系列之三--七种武器
  7. asp.net设置元素css的属性
  8. 玩转VIM编辑器-vim的命令行
  9. 文字和表单(checkbox/radio)元素垂直对齐方法,兼容Firefox和IE。
  10. 【CSS】设置 border 长度
  11. Python进行拉勾网数据爬取框架与思路
  12. TMUX Cheat Table:和那些妖艳贱货不一样的 TMUX 教程
  13. OpenGL法线贴图
  14. [Vue warn]: Error in callback for watcher “lists“: “TypeError: Cannot read property ‘length‘ of unde
  15. Downloading from maven-public: http:///maven-metadata.xml卡住了
  16. 毕业论文参考文献引用
  17. 微信小程序高度自适应布局
  18. CAD图纸打印文字显示空心怎么办?
  19. ABAP ALV OO 自定义Toolbar 和Command及listmenu按钮
  20. 嵌入式系统Linux内核开发实战指南(ARM平台) 书评

热门文章

  1. java numbereditor_java.lang.NumberFormatException: For input string: ${jdbc.maxActive}
  2. (超详细)单臂路由及操作步骤
  3. Vue.js动态改变样式
  4. IPFS 二维码添加的问题
  5. 试玩UML User Mode Linux
  6. 互联网+智慧人才:全面提升人才工作协同、服务、监管、决策的综合水平
  7. 股市基础知识、股票的种类
  8. 2023年软考系统架构师新版专栏导读
  9. Build.gradle的详细配置说明
  10. 性格内向的人工作上也大有作为