Java中IO流体系

转载: 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流的作用和分类。由于这块内容比较多,一篇文章讲完篇幅比较长,所以最重要的缓存流和转换流以及如何选择用哪些流来操作就明天继续更新了,欢迎大家继续关注本公众号的技术博文。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值