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

2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

按照流向则分未输入流和输出流。

JavaIO流体系可如下表示 :

|----流

  |-----字符流

    |-----Reader

      //××××××Reader

    |-----Writer

  |-----字节流

    |-----InputStream

    |-----OutputStream

即所有的字符流都继承自Reader/Writer 这两个抽象基类 , 而所有的字节流都继承自InputStream和OutputStream。

IO流可分为 节点流和处理流两大类。

节点流:可以从或向一个特定的地方(节点)读写数据。主要有下:

类型 字符流 字节流
File(文件)
FileReader
FileWriter
FileInputStream
FileOutputSream
Memory Array
CharArrayReader
CharArrayWriter
ByteArrayInputStream
ByteArrayOutputSream
Memory String
StringReader
StringWriter
   -
Pipe(管道)
PipedReader
PipedWriter
PipedInputSream
PipedOutputSream

处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写,处理流的构造方法总是要带一个其他流对象作为参数(装饰模式),一个流对象进过其他流的多次包装,叫做流的链接。主要可以分为以下几种:

  a. 缓冲流 (BufferedReader / BufferedWriter 和 BufferedInputStream / BufferedOutputSream) 可以提高流的读写效率。

    缓冲流读写对象:

BufferedReader bufr=new BufferedReader(new FileReader("buf.txt"));
BufferedWriter bufw=new BufferedWriter(new FileWriter("buf.txt"));

    缓冲流有一个特有方法:readLine();一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回,当读到末尾时,返回null,其原理还是与缓冲区关联的流对象的read方法,只不过每一次读取到一个字符,先不进行具体操作,先进行临时储存,当读取到回车标记时,将临时容器中储存的数据一次性返回。

  b. 转换流(InputStreamReader / OutputStreamReader) 它是字符流和字节流之间的桥梁,该流对象中可以对读取到的字节数据进行指定编码的编码转换。 构造方法有

 InputStreamReader(InputStream);        //通过构造函数初始化,使用的是本系统默认的编码表GBK。InputStreamReader(InputStream,String charSet);   //通过该构造函数初始化,可以指定编码表。OutputStreamWriter(OutputStream);      //通过该构造函数初始化,使用的是本系统默认的编码表GBK。OutputStreamwriter(OutputStream,String charSet);   //通过该构造函数初始化,可以指定编码表。

  c. 数据流(DataInputStream / DataOutputStream) 数据流可以方便地对一些基本类型数据进行直接的存储和读取,不需要再进一步进行转换。

  

   int readInt();//一次读取四个字节,并将其转成int值writeInt(int);//一次写入四个字节,注意和write(int)不同,write(int)只将该整数的最低一个8位写入,剩余三个8为丢失short readShort();writeShort(short);String readUTF();//按照utf-8修改版读取字符,注意,它只能读writeUTF()写入的字符数据。writeUTF(String);//按照utf-8修改版将字符数据进行存储,只能通过readUTF读取。

  在使用数据流进行数据存储的时候要按照一定的先进先出的顺序进行。

  d. 打印流(PrintStream / PrintWriter)

  PrintStream是一个字节打印流,System.out对应的类型就是PrintStream,它的构造函数可以接受三种数据类型的值:1.字符串路径。2.File对象 3.OutputStream

PrintWriter是一个字符打印流,它的构造函数可以接受四种类型的值:1.字符串路径。2.File对象 3.OutputStream  4.Writer  对于1、2类型的数据,可以指定编码表,也就是字符集,对于3、4类型的数据,可以指定自动刷新,当该自动刷新为True时,只有3个方法可以用:println,printf,format。
e. 对象流(ObjectInputStream/ObjectOutputStream)
//待续

转载于:https://www.cnblogs.com/java-panda/p/4149486.html

Java学习日记之 Java-IO流相关推荐

  1. java学习日记21,IO流

    周二跑沙河开例会,晚上回来也在打王者,没怎么学习,就没记录了,今天继续坚持. File类 file,文件,java.IO.File类:文件和文件目录路径的抽象表示形式. File类可以对文件.文件夹进 ...

  2. Java学习之路-day21 IO流02

    Java IO流 每日一句 1.字符流 1.1为什么会出现字符流 1.3字符串中的编码解码问题 1.4字符流写数据 1.5字符流读数据 1.6字符流用户注册案例 1.7字符缓冲流 1.8字符缓冲流特有 ...

  3. Java学习日记-Day01

    Java学习日记-Day01 Java语言概述 比特(byte)与字节 内存 Java基础知识图解 人机交互方式 常用的DOS命令 常用快捷键 计算机编程语言介绍 第一代语言 第二代语言 第三代语言 ...

  4. 菜鸟学习笔记:Java提升篇6(IO流2——数据类型处理流、打印流、随机流)

    菜鸟学习笔记:Java IO流2--其他流 字节数组输入输出流 数据类型处理流 基本数据类型 引用类型 打印流 System.in.System.out.System.err 随机流RandomAcc ...

  5. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

  6. Java基础学习(二十七)之IO流

    1. File 1.1 File类概述和构造方法(myFile中的com.itheima_01中的FileDemo01) File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对 ...

  7. Java学习系列(十)Java面向对象之I/O流(上)

    IO流 我们知道应用程序运行时数据是保存在内存中的,但由于内存中的数据不可持久保存(如断电或程序退出时数据会丢失),因此需要一种手段将数据写入硬盘或读入内存.面向IO流编程就是一种很好的选择.IO:I ...

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

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

  9. Java学习日记1——基础认知

    Java学习日记1--基础认知 学习Java阶段,如果发现不正确的描述,还请指正! 首先附上Java相关下载链接和配置教程链接 Java相关软件工具下载地址:官方下载 Java环境配置(win10配置 ...

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

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

最新文章

  1. HTML 框架 frameset,frame
  2. 生产者/消费者模式(阻塞队列)
  3. Android EditText的设置
  4. html循环自动点击事件,js循环遍历ul中li的点击事件,给给选中li添加css
  5. php用script判断闰年,php判断/计算闰年的方法小结【三种方法】
  6. 智能自动PPR更改事件策略
  7. 我的世界java版做船_“不要在云了,船的合成用木铲?”我的世界:Java和基岩版的差异...
  8. Vsftp在Ubuntu的安装与配置
  9. Spark SQL and DataFrame Guide(1.4.1)——之DataFrames
  10. Oracle 数据类型 选择自 tjandy 的 Blog
  11. 09.Java数据算法
  12. 【基础语法】C语言编写贪吃蛇游戏
  13. mysql 命令行关闭fuw_网络管理 - eSight V300R009C00 维护指南 12 - 华为
  14. Piranha web 界面LVS DR 模式配置图文详解
  15. kotlin学习之高阶函数及常用基本高阶函数
  16. 红外线计件器课程设计报告书
  17. kotlin data class 遇到的坑
  18. JVM中如何排查CPU飙高的问题
  19. Oracle 19c rac的搭建
  20. 计算机二级报名时间2020年3月山西,2020年3月山西计算机二级报名及考试时间

热门文章

  1. 自信息、信息熵和相对熵
  2. elasticsearch pinyin 拼音分词器
  3. 洛谷—— P2251 质量检测
  4. 相似图片搜索的原理(二)(转)
  5. 获取ItemsControl中当前item的binding数据
  6. Ubuntu14.10安装Eclipse
  7. 使用html和css的一些经验
  8. Struts,Spring,Hibernate三大框架的面试
  9. Godaddy域名使用说明
  10. 读《你的灯亮这么》---走出问题的乌托邦