近期几天细致学了Java的io流。本来是打算看视频通过视频来学习的。但是后来发现事实上视频看不怎么懂也感觉不是非常easy上手,所以就通过百度和api文档学习了Java的io流

io流能够有两个分类,一个是字节流和字符流,还有一个是输入流和输出流。

先说说字节流和字符流吧:首先实际上字节流在操作的时候是不会用到缓冲区的。是文件本身的直接操作的,可是字符流在操作的时候下会用到缓冲区的。是通过缓冲区来操作文件的。字节流与字符流的其它差别呢就是读写单位不同,毫无疑问,字符流是以字符为单位。字节流是以字节为单位(一个字节8个bit)。由此可知两种的处理对象不同,字节流能处理全部类型的数据,而字符流仅仅能处理字符类型的数据。所以我们能够得到一个结论。那就是仅仅要是处理纯文本数据。就优先考虑使用字符流,除此之外使用字节流。

然后就要说一说输入流和输出流。老实说,从学C语言那时候開始我就输入和输出,output和input非常混乱也非常不明确。须要不断去接触才更加可以牢记差别吧。输入呢通常是指从外部文件(如硬盘,键盘等)获取数据,而输出呢则是指从程序本身向外部输出数据(如写入文件,显示都屏幕上)。

而输入流和输出流还有还有一个差别。那就是对输入流仅仅能进行读操作,而对输出流仅仅能进行写操作。

说完这两个大分类。我们能够来了解下当中更具体的一些内容,看看一个类图吧

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuX2hhaXpob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

由继承图看出来,字符输入流Reader是全部的字符输入流的父类。PIpedReader主要是能够通过与其它线程建成的管道读取数据。

而InputStreamReader是一个连接字节流和字符流的桥梁,能够将字节流转变为字符流。

字符输出流Writer是全部的字符输出流的父类。其它子类分别与Reader的各个子类相相应。

输入字节流InputStream是全部的输入字节流的父类。ByteArrayInputStream、StringBufferInputStream、FileInputStream是分别从相应文件读入数据

而PipedInputStream 是从与其他线程共用的管道中读取数据。

输出字节流OutputSteam 是全部的输出字节流的父类。

其它分别与InputSteam的子类相互相应。

整个IO类中除了字节流和字符流还包含字节和字符转换流。

OutputStreramWriter将输出的字符流转化为字节流

InputStreamReader将输入的字节流转换为字符流

将字节输出流转化为字符输出流Writer out=newOutputStreamWriter(newFileOutputStream(file));

将字节输入流变为字符输入流Reader read=newInputStreamReader(newFileInputStream(file));

那有一个问题,神恶魔时候才要用到转换流呢:当字节和字符之间有转换动作时和流操作的数据须要编码或者解码的时候。

以内容为输出输入目的地,使用内存操作流

ByteArrayInputStream 主要将内容写入内容

ByteArrayOutputStream  主要将内容从内存输出

内容操作流一般使用来生成一些暂时信息採用的,这样能够避免删除的麻烦

合并流 SequenceInputStream

SequenceInputStream主要用来将2个流合并在一起。比方将两个txt中的内容合并为另外一个txt。

PushBackInputStream回退流:能够把读取进来的某些数据退回到数据缓冲区

BufferedReader仅仅能接受字符流的缓冲区,由于每个中文须要占领两个字节,所以须要将System.in这个字节输入流变为字符输入流,採用:

BufferedReader buf =
new BufferedReader(
                new
InputStreamReader(System.in));
比較经常使用的是採用Scanner类来进行数据输入
Scanner sca =
new
Scanner(System.in);

        // 读一个整数
        int
temp = sca.nextInt();
查了下api文档关于scanner的内容发现Scanner的參数代表的是数据从哪里扫描,scanner能够接受不论什么的输入流
 

为System.out.println()重定向输出(能够把向控制台输出改为写入文件操作)

System.err重定向 (能够将错误信息写入文件保存)

在流操作中常常须要用到:和\  不推荐直接用,最好调用两个常量File.separator(\)与File.pathSeparator(:),这样处理的话跨平台操作会比較兼容

假设想在文件里换行的话。须要使用“\r\n”

Java io流的学习的更多相关文章

  1. 关于JAVA IO流的学习

    初学Java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见 ...

  2. JAVA.IO流学习笔记

    一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...

  3. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  4. Java IO流学习总结八:Commons IO 2.5-IOUtils

    Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...

  5. Java IO流学习总结(1)

    Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本 ...

  6. Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter

    在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流Buffered ...

  7. Java IO流学习总结一:输入输出流

    Java IO流学习总结一:输入输出流 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自[赵彦军的博客] J ...

  8. Java IO流学习

    Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...

  9. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

随机推荐

  1. 微信公众平台开发学习笔记2--获取access token

    access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.获取的access_token过期时间为2小时.获取access token具体说明请参考官方文档. ...

  2. 如何设定editplus为txt默认打开程序?

    如何设定editplus为txt默认打开程序? 如图操作即可:

  3. Spring MVC模式示例(采用解耦控制器)

    Product package com.mstf.bean; import java.io.Serializable; /** * Product类,封装了一些信息,包含三个属性 * @author ...

  4. 使用goroutine+channel和java多线程+queue队列的方式开发各有什么优缺点?

    我感觉很多项目使用java或者c的多线程库+线程安全的queue数据结构基本上可以实现goroutine+channel开发能达到的需求,所以请问一下为什么说golang更适合并发服务端的开发呢?使用 ...

  5. inceptionnet

    inception发展历程 v1 mlp多层感知器层 上面两个观看孔径,尺寸不一样,可以抽取不同分辨率,不同尺度的邻域范围的信息作为特征,这样就可以观察到输入数据的不同层次,不同分辨率的特征 因为这个 ...

  6. require(): open_basedir restriction in effect. File

    新安装的 lnmp 环境,将项目放上报 require(): open_basedir restriction in effect. File 的错误! 错误日志显示,访问脚本不在 open_base ...

  7. Git 内部原理 - (7)维护与数据恢复 (8) 环境变量 (9)总结

    维护与数据恢复 有的时候,你需要对仓库进行清理 - 使它的结构变得更紧凑,或是对导入的仓库进行清理,或是恢复丢失的内容. 这个小节将会介绍这些情况中的一部分. 维护 Git 会不定时地自动运行一个叫做 ...

  8. 紫书 例题 10-7 UVa 10820 (欧拉函数)

    这道题要找二元组(x, y) 满足1 <= x, y <= n 且x与y互素 那么我就可以假设x < y, 设这时答案为f(n) 那么答案就为2 * f(n) +1(x与y反过来就乘 ...

  9. 内存,寄存器和cache的区别与联系

    1. 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC).在中央处理器的 ...

  10. 【SICP练习】152 练习4.8

    练习4-8 原文 Exercise 4.8. "Named let" is a variant of let that has the form (let <var> ...