目录

引言

字节流和字符流

字节流

字节输入流

字节输出流

字符流

字符输入流

字符输出流


引言

在完完全全的完成本学期的学习任务之后,终于可以有时间继续更新Java相关的文章了。那么今天我们要学习的是的Java中的IO流(I即为Input,O即为Output),也称为输入流,输出流,其主要的作用是为了能够对文件中的数据进行输入和输出(读和写),更加方便了今后我们在Java道路上的学习,好了,废话不多说,我们开始今天的学习吧!

字节流和字符流

 在上图中,橙色部分是抽象类,而蓝色部分则是实现类

字节流

字节流,顾名思义就是将数据细分为字节对文件进行读和写的操作, 主要分为字节输入流和字节输出流。

字节输入流

下面是字节输入流中经常会用到的构造器和方法:

构造器 说明
public        FileInputStream(File file) 创建字节输入流管道与源文件对象接通
public        FileInputStream(String pathname) 创建字节输入流管道与源文件路径接通
方法名称 说明
public int read() 每次读取一个字节返回,如果字节已经没有可读的返回-1
public int read(byte[ ] buffer) 每次读取一个字节数组返回,如果字节已经没有可读的返回-1

接下来通过代码更好的加深对这一部分知识点的理解吧!

File file = new File("File//data.txt");//第一种构造器,参数是File类InputStream inputStream = new FileInputStream(file);//第二种构造器,参数是文件的路径,可以是相对也可以是绝对的路径InputStream inputStream1 = new FileInputStream("File//data.txt");//通过字节读取文件中的数据int len;while ((len=inputStream.read()) != -1){System.out.print((char) len);}System.out.println();//通过字节数组读取文件中的数据byte [] buffer = new byte[3];while ((len=inputStream1.read(buffer))!=-1){String s = new String(buffer,0,len);System.out.print(s);}
//输出结果:
//ab1abab
//ab1abab

现在我们看到的输出结果和文件中的内容是一一对应的,那么它就一定是没有问题的了吗?其实并不是,只是还没有遇到问题而已,首先我们应该了解到的是,在utf-8中,字母和数字都是一个字节,而中文是由三个字节组成的,那么当我们的文件中出现汉字的时候,第一种方法就无法实现正常的读取了,因为每次都读取一个字节的原因会将汉字拆解,在输出的时候形成乱码的情况;而第二种则方法可以在特殊的情况下实现对汉字的输出,必须满足的条件是刚好中文的三个字节都在同一个字节数组中。

字节输入流并不适合所有的文件数据,由此而引出了字符输入流。

字节输出流

下面是字节输出流常用到的方法:

方法 说明
public void write (int a) 写一个字节出去
public void write (byte [ ]buffer) 写一个字节数组出去
public void write (byte [ ]buffer,int off, int len) 将一个字节数组中的一部分写出去
file.close() 流的关闭,不能再写数据
file.flush() 流的更新,还可以继续写数据

接下来通过代码更好的加深对这一部分知识点的理解吧!

OutputStream outputStream = new FileOutputStream("File//data.txt",true);
//true表示可以对文件进行追加内容,若没有true则会在关闭文件之后,进行写文件的时候会对之前的内容进行覆盖。outputStream.write('a');outputStream.write(13);outputStream.write('美');outputStream.flush();byte[] buffer = {'s','y','l','m',99};outputStream.write(buffer);outputStream.write(buffer,1,3);outputStream.close();

经过上面一系列操作以后,会将这些数据写进data.txt文件之中,但是仍然会出现问题,有时无法将中文正常的写进去,那么它也不是一个适合所有文件的,由此而引出了字符输出流。

字符流

字符流,顾名思义就是将数据细分为字符对文件进行读和写的操作, 主要分为字符输入流和字符输出流。

字符输入流

下面是字符输入流中经常会用到的构造器和方法:

构造器 说明
public FileReader (File file) 创建字符输入流管道与源文件对象接通
public FileReader(String pathname) 创建字符输入流管道与源文件路径接通
方法 说明
public int read() 每次读取一个字符返回,如果字符已经没有可读的返回-1
public int read(char [ ]buffer) 每次读取一个字符数组返回,返回读取的字符个数,如果字符没有可读的返回-1

字符输入流的构造器和方法大致上和字节输入流的相同,不同的地方在于字符输入流是以字符为单位的读取,无论你是字母还是数字,都作为一个字符进行读取,这样便可以避免在读取中文的时候出现乱码的问题。

接下来通过一部分代码来加深对它的理解吧!

File file = new File("File//data.txt");//第一种构造器,参数是File类FileReader fileReader = new FileReader(file);//第二种构造器,参数是文件的绝对路径或者相对路径FileReader fileReader1 = new FileReader("File//data.txt");//第一种方法,一个一个字符读取int len;while ((len = fileReader.read())!=-1){System.out.print((char) len);}//第二种方法,以字符数组进行读取char []buffer = new char[3];while ((len = fileReader1.read(buffer))!=-1){String s = new String(buffer,0,len);System.out.println(s);}
//输出结果:
//110,119,120
//110
//,11
//9,1
//20

通过以字符为单位的读写,便可以避免在读取中文的时候出现乱码的问题了。

字符输出流

下面是字符输出流中经常会用到的构造器和方法:

构造器 说明
public FileWriter(File file) 创建字符输出流管道与源文件对象接通
public FileWriter(File file,boolean append) 创建字符输出流管道与源文件对象接通,可追加数据
public FileWriter(String filepath) 创建字符输出流管道与源文件路径接通
public FileWriter(String filepath,boolean append) 创建字符输出流管道与源文件路径接通,可追加
方法 说明
void writer(int c) 写入一个字符
void writer (char [ ] buffer) 写入一个字符数组
void writer (char[ ]buffer,int off,int len) 写入字符数组的一部分
void writer(String str)         写入一个字符串
void writer(String str,int off,int len) 写入字符串的一部分
close和flush 输出流的关闭和刷新

接下来就通过代码来加深对它的理解吧!

FileWriter fileWriter = new FileWriter("File//data.txt");fileWriter.write('k');fileWriter.write('d');char []buffer = {'i','r','v','i','n','g'};fileWriter.write(buffer);fileWriter.flush();String s = "James";fileWriter.write(s);fileWriter.write(s,0,4);fileWriter.close();

字符输出流的使用便可以很好地解决了中文不能正常写入文件的问题了。

创作不易,给个三连

​​​​​​​

Java中的字节流和字符流如何理解——精简相关推荐

  1. Java中的字节流和字符流区别

    字节流 1.字节流在操作的时候不会用到缓冲区(也就是内存) 2.字节流可用于任何类型的对象,包括二进制对象 3.字节流处理单元为1个字节,操作字节和字节数组. 字符流 1.而字符流在操作的时候会用到缓 ...

  2. java中的字节流和字符流

    前言 字节流:分为字节输入流(InputStream)和字节输出流(OutputStream) 字符流:分为字符输入流(InputStreamReader)和字符输出流(OutputStreamWri ...

  3. 【Java基础】吃透Java IO:字节流、字符流、缓冲流

    文章目录 [Java基础-3]吃透Java IO:字节流.字符流.缓冲流 一.初识java IO 1.1 IO流分类 1.1.1 输入流与输出流 1.1.2 字节流与字符流 1.1.3 节点流和处理流 ...

  4. java中过滤流_第十四讲 Java中的字节流和过滤流

    第十四讲Java中的字节流和过滤流 主要内容 InputStream和FileInputStream OutputStream和FileOutputStream 文件字节IO流应用举例 过滤流类和常用 ...

  5. Stoker的Java学习之字节流与字符流

    Java学习之字节流与字符流 一. 字节流 字节流是在java.io包中操作文件内容的一大类,字节流将文字图片音频等文件转换成字节,进行数据传输. 在字节流中输出数据主要是使用OutputStream ...

  6. Java学习之字节流和字符流的转化

    Java学习之字节流和字符流的转化 1.字节流转换成字符流 输入字节流转为字符流需要用到InputStreamReader的构造方法: InputStreamReader(InputStream in ...

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

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

  8. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  9. java day20【字节流、字符流】

    第一章 IO概述 1.1 什么是IO 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了ctrl+s ,可能文件就白白编辑了.当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里.那 ...

最新文章

  1. python3生成随机数_Python3.3中如何产生伪随机数
  2. CloudCare容器技术白皮书
  3. Javascript之全局变量和局部变量部分讲解
  4. 【手势交互】9. PS Move
  5. REVERSE-PRACTICE-BUUCTF-22
  6. python综合管理系统_Python-20 (信息系统-框架/循环/增删/综合应用)
  7. (原创)c++11中的日期和时间库
  8. 小记css的margin collapsing
  9. vue 拖拽元素到任意位置
  10. MYSQL获取同时关注了某两个(或者N个)用户的用户
  11. 183.从不订购的客户
  12. 百度云下载的压缩吧损坏问题解决
  13. 智库说 | 杨宁:从城市管理走向城市治理 大数据将发挥更大作用
  14. python下载动作电影_Python爬虫实战之取电影天堂,,新手练手项目
  15. 多线程的创建和使用,多线程案例:火车站售票
  16. Java+SSM+Jsp+Mysql实现Web汽车信息管理系统
  17. UnitTest 框架
  18. 最小代价树(动态规划)
  19. 深入讲解服务器集群技术
  20. 万兴PDF修改编辑软件 原PDFelement 7word转pdf转换软件

热门文章

  1. 生产车间调度的六大特点
  2. ReviverSoft Registry Reviver中文绿色便携版 v4.21.1.2
  3. 【java入门必做案例】十六进制字符串转整数
  4. golang云原生之docker镜像
  5. Java 字符串压缩/解压【开发记录】
  6. 火牛单片机rtc时钟配置_STM8单片机rtc时钟的设计
  7. 慕课网python就业_python全栈开发慕课网
  8. 【python】python multiprocessing 获取当前CPU核心数
  9. javamail通过代理发送邮件
  10. 【渝粤教育】电大中专市场营销管理22作业 题库