转载: https://mp.weixin.qq.com/s?__biz=MzA5NzgzODI5NA==&mid=2454030958&idx=1&sn=df27aadb92e575e96115ec809506245a&chksm=872b9fd7b05c16c10f265b495b7204b843f6825771292b30a9124f6d32367d2d9485493316ea&scene=21#wechat_redirect

写的很不错的一篇 IO 总结

导语

Java中IO流体系是很重要的基础,我相信一开始接触Java,很多人最头疼的就是这些了,搞不清时,真的会把自己绕进去。在程序中所有数据的传输又都是以流的方式进行的,为了能搞清楚这部分的知识,有必要重新整理一下Java基础,为以后的编程打下良好的基础。

1什么是IO流?

IO指的是Input/Output,IO流:输入输出流。 我们称为数据流。

在Java程序中,对于数据的输入 / 输出操作都是以流的方式进行的。

JDK中提供了各种各样的流类,用以获取不同种类的数据。

常见的2种IO流分类:

1.按流向分:

  • 输入流:程序可以从中读取数据的流

  • 输出流:程序能向其中写入数据的流

2. 按数据传输单位分:

  • 字节流:以字节为单位传输数据的流

  • 字符流:以字符为单位传输数据的流

为了能更好的了解Java中的IO流,下面用一张图来说明:

2IO流的基类和分类

下面用一张表格详细讲解IO流的分类:

分类

字节输入流

字节输出流

字符输入流

字符输出流

抽象基类

InputStream

OutputStream

Reader

Writer

访问文件

FileInputStream

FileOutputStream

FileReader

FileWriter

访问数组

ByteArrayInputStream

ByteArrayOutputStream

CharArrayReader

CharArrayWriter

访问管道

PipedInputStream

PipedOutputStream

PipedReader

PipedWriter

缓冲流

BufferedInputStream

BufferedOutputStream

BufferedReader

BufferedWriter

转换流

   

InputStreamReader

OutputStreamWriter

对象流

ObjectInputStream

ObjectOutputStream

   

抽象基类

FilterInputStream

FilterOutputStream

FilterReader

FilterWriter

打印流

 

PrintStream

 

PrintWriter

特殊流

DataInputStream

DataOutputStream

   

以上流都是继承四个抽象基类:

字节输入流:InputStream           字符输入流:Reader

字节输出流:OutputStream        字符输出流:Writer

为了更好的学习Java流体系,下面主要先从四个抽象基类开始分析。

3InputStream和OutputSteam

InputStream 字节输入流:继承自InputStream的流都是用于向程序中输入数据的。

OutputStream 字节输出流 :继承自OutputStream的流是程序用于向外输出数据的。

下面举个例子来说,继承自这两个流的文件字节操作流FileInputStream和FileOutputStream的使用。

例子:现在有个需求是要将一份音乐文件从e:\src复制到e:\dest。

public static void main(String[] args) {// TODO Auto-generated method stubString srcPath = "E:\\src\\media.mp4";
String destDir = "E:\\dest";
File destDirFile = new File(destDir);if (!destDirFile.exists()) {
destDirFile.mkdir();
}
FileInputStream fInputStream = null;
FileOutputStream fOutputStream = null;//从Src读:输入流//写入dest:输出流try {
fInputStream = new FileInputStream(srcPath);
fOutputStream = new FileOutputStream(destDirFile.getAbsolutePath()+File.separator+"cp_media.mp4");//循环通过输入流,读取数据,边读边写byte[] buff = new byte[100];int len=-1;while ((len=in.read(buff,0,buff.length))!=-1) {//返回值:是真实读取到的字节数,如果到了流的末尾,返回-1//通过输出流写出fOutputStream.write(buff,0,len);//推荐使用这个方法,读到多少字节就写入多少字节}
} catch (IOException e) {
}finally{try {if (fInputStream != null) {
fInputStream.close();
}if (fOutputStream != null) {
fOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}}}

4Reader 和Writer

Reader 字符输入流,继承自Reader的流都是用于向程序中输入数据的。

Writer  字符输出流,继承Writer的流都是向程序中输出的。

下面同样举个例子来说,继承自这两个流的文件字符操作流FileWriter和FileReader的使用。

例子:用FileWriter和FileReader完成文件的复制[把D盘中的Stream.txt复制到C盘的根目录下]

public static void main(String[] args) {File filesrc=new File("D:\\iotest2\\Stream.txt");File filedest=new File("C:\\"+"copy.txt");        try {Reader in=new FileReader(filesrc);        Writer out=new FileWriter(filedest);            char[]cs=new char[1024];            int len=-1;//实际的位置while((len=in.read(cs,0,cs.length))!=-1){out.write(cs,0,len);}out.close();in.close();}  catch (IOException e) {e.printStackTrace();}}

5总结

今天主要是介绍了Java基础中很重要的IO流,主要讲了IO流的作用和分类。由于这块内容比较多,一篇文章讲完篇幅比较长,所以最重要的缓存流和转换流以及如何选择用哪些流来操作就明天继续更新了,欢迎大家继续关注本公众号的技术博文。

Java中IO流体系相关推荐

  1. java中IO流体系以及常用实现类

    一.体系   分为字节流和字符流,也可以说是分为输入流和输出流.字节流InputStream,OutputStream以字节形式操作二进制文件非常合适.字符流Writer和Reader操作文本比较适宜 ...

  2. Java中IO流的总结

    有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...

  3. Java中IO流,输入输出流概述与总结(转载自别先生文章)

    Java中IO流,输入输出流概述与总结 总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都 ...

  4. 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流

    Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...

  5. Java中IO流面试题

    Java 中 IO 流分为几种? Java IO与 NIO的区别? 常用io类有那些? 字节流与字符流的区别? 说说阻塞 IO 模型? 说说非阻塞 IO 模型? 说说多路复用 IO 模型? 说说信号驱 ...

  6. java中io流是类吗_Java中的IO流

    今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...

  7. Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  8. java中io流,Reader和Writer,InputStream和OutputStream,转换流 InputStreamReader 和 OutputStreamWriter

    java中所谓流通俗来讲就是数据源的传输,我们的文件,视屏,对象都可以叫做数据源,io将他们那转换为可以在不同程序中传输的数据,众所周知电脑存储是二进制,而处理时常遇到字节和字符的写入和写出,分别以8 ...

  9. java中IO流详解

    不断更新中!!! 1.流的定义及分类 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输操作都是以"流"的方式进行.设备可以是文件,网络,内存等.将数据从 ...

最新文章

  1. python中if错误-Python中常见的异常处理
  2. 【Jmeter】 Report Dashboard 生成html图形测试报告
  3. sublime text3 注册码,亲测可用
  4. 天不知道地知道你不知道我知道谜底_温州这里有个7000平方米的“寻宝”地,你不知道就亏大了!...
  5. 如何使用BOOTSTRAP 栅格系统?
  6. 第九周LINUX 学习笔记
  7. Go 自动构建工具 dogo 代码已托管到 Git@OSC
  8. rabbitmq使用_RabbitMQ 简介以及使用场景
  9. leftjoin多表联合查询_图解面试题:多表如何查询?
  10. MAC系统下jmeter安装教程
  11. 基于微信小程序的点餐系统源码【包调试运行】
  12. sim800a指令_SIM900A 各功能指令 详细版
  13. Mac “EdrawMax”已损坏,无法打开。 您应该将它移到废纸篓
  14. hosts文件位置在哪里?(3种打开hosts文件的方法)
  15. ndows 内存诊断工具,Windows10自带内存检测工具的使用方法
  16. 北京职工修改医保定点医院
  17. 打造海报视觉效果—利用图层模式调色
  18. 什么是软件 驱动软件 什么是程序
  19. Python字符串中提取国家名称
  20. SAP中订单结算KO88\ CO88\KO8G的区别

热门文章

  1. 电磁场与仿真软件(35)
  2. C语言学习笔记-有符号数和无符号数相加的问题
  3. [2018][PAMI]Deep Self-Evolution Clustering 笔记
  4. 一场 Chat 拥有自己的博客
  5. Android DLNA投屏-基本原理
  6. 国产光谱共焦位移传感器能侧哪些地方
  7. 微服务集成SkyWalking
  8. 接口测试——postman文件夹介绍以及批量执行用例
  9. SpringBoot之从零搭建网站(可提供源码)
  10. 一行能装逼的JavaScript代码的延伸