近期几天细致学了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. WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

    核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Websh ...

  2. CSS中关于vertical-align垂直对齐

    一向以来,我对vertical-align的属性都搞的不是太清楚,今天刚好碰到有朋友问我相关的问题,于是自己潜心研究了一番,发现这玩意还真不是个简单的东西,在此我分享的东西都是抛弃脑残的IE的,如果你 ...

  3. AS3 常见问题

    SharedObject 不起作用(exe, air中) var so:SharedObject = SharedObject.getLocal("aa", "/&quo ...

  4. 机器学习(七) PCA与梯度上升法 (下)

    五.高维数据映射为低维数据 换一个坐标轴.在新的坐标轴里面表示原来高维的数据. 低维 反向 映射为高维数据 PCA.py import numpy as np class PCA: def __ini ...

  5. springMVC接受前台传值

    今天,用ajax向springMVC的控制器传参数,是一个json对象.({"test":"test","test1":"test ...

  6. Goldengate进程的合并与拆分规范

    Goldengate抽取进程的合并与拆分原则 1.    文档综述 1.1.  文档说明 本文档描述了对GoldenGate的抽取进程进行拆分和合并的基本原则和详细步骤.  1.2.  读者范围 本文 ...

  7. nginx的gizp压缩

    好处:         页面另存为大小比浏览器传输大小大很多.好处是加快传输.节省带宽.   原理:           浏览器 -> 请求 -> 声明可以接受的压缩方式[http 协议请 ...

  8. 网络编程select函数

    select函数的作用: 在编程的过程中,经常会遇到许多阻塞的函数,好像read和网络编程时使用的recv, recvfrom函数都是阻塞的函数,当函数不能成功执行的时候,程序就会一直阻塞在这里,无法 ...

  9. Java基础学习总结(15)——java读取properties文件总结

    一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResource ...

  10. EBS 第一个项目 学习总结 ---- 发运模块

    EBS 组织架构: (一)业务组(BG) (二)法律实体(LE) (三)业务实体(OU) (四)库存组织(INV) (五)公司成本中心(Cost Center) (六)HR组织 (七)多组织接入控制 ...