Java io流的学习

最近几天仔细学了Java的io流,本来是打算看视频通过视频来学习的,可是后来发现其实视频看不怎么懂也感觉不是很容易上手,所以就通过百度和api文档学习了Java的io流

io流可以有两个分类,一个是字节流和字符流,另一个是输入流和输出流。

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

然后就要说一说输入流和输出流。老实说,从学C语言那时候开始我就输入和输出,output和input很混乱也很不明白。需要不断去接触才更加能够牢记区别吧。输入呢一般是指从外部文件(如硬盘,键盘等)获取数据,而输出呢则是指从程序本身向外部输出数据(如写入文件,显示都屏幕上)。而输入流和输出流还有另一个区别,那就是对输入流只能进行读操作,而对输出流只能进行写操作。

说完这两个大分类,我们可以来了解下其中更详细的一些内容,看看一个类图吧

由继承图看出来,字符输入流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”

时间: 2024-10-11 11:12:25

Java io流的学习的相关文章

关于JAVA IO流的学习

初学Java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见. 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是java io 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Serializa

Java IO流学习总结

Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流的区

Java IO流学习总结(转)

原文地址:http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.   IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符

学习笔记-java IO流总结 转载

1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读写数据的标准方法.任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法. Java.io是大多数面向数据流的输入/输出类的主要软件包.此外,Java也对块传输提供支持,在核心库 java.nio中采用的便是块IO. 流IO的好处是简单易用,缺点是效率较低.块IO效率很高,但编程比较

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

Java IO流详尽解析(转自 http://www.2cto.com/kf/201312/262036.html)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

java IO流文件的读写具体实例(转载)

引言: 关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽.上次突然一个同事问了我java文件的读取,我一下子就懵了第一反应就是去网上找,虽然也能找到,但自己总感觉不是很踏实,所以今天就抽空看了看java IO流的一些操作,感觉还是很有收获的,顺便总结些资料,方便以后进一步的学习... IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader  低端流:所有的外界设备中的流都是低端流

Java IO流详尽解析(大神之作)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

Java IO流详尽解析(转)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别