码迷,mamicode.com
首页 > 编程语言 > 详细

Java IO流

时间:2015-06-12 13:08:33      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

IO流主要用于硬盘,内存,键盘等处理设备上的数据操作,根据所处理的数据的数据类型的不同可以分为:字节流(抽象基类为InputStream和OutputStream)和字符流(抽象基类为Reader和Writer)。根据流向不同,可以分为:输入流和输出流。IO的主要结构图如下:

技术分享

字符流与字节流的主要区别?

1.字节流读取的时候,读到一个字节就返回一个字节;字符流使用字节流读取一个或多个字节(中文对应的字节有两个,在UTF-8编码表中是3个字节)时,先去查指定的编码表,将查到的字符返回

2.字节流可以处理所有类型的数据,如:图片,mp3,AVI视频文件。而字符流只能处理字符数据,只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流

 

IO流主要可以分为节点流和处理流两大类

一、节点流类型

该类型可以从或者向一个特定的地点或者节点读取数据。主要类型如下

类型 字符流  字节流
File(文件)

FileReader    

FileWriter 

FileInputStream

FileOutputStream

Memory Array

CharArrayReader

CharArrayWriter

ByteArrayInputStream

ByteArrayOutputStream

Memory String

StringReader

StringWriter

 
Pipe(管道)

PipedReader

PipedWriter

PipedInputStream

PipedOutputStream

二、处理流类型

该类型是对一个已经存在的流进行封装,通过封装流来实现数据的读写,处理流的构造方法总是要带一个其他流对象作为参数,一个流对象经过其他流的多次包装,叫做流的链接。主要可以分为以下几种:

1、缓冲流(BufferedInputStream / BufferedOutputStream / BufferedWriter / BufferedReader)

写入缓冲区对象: BufferedWriter bufw = new BufferedWriter(new FileWriter("buf.txt"));

读取缓冲区对象: BufferedReader bufr = new BufferedReader(new FileReader("buf.txt"));

该类型的流有一个特有的方法:readLine();一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回,当读到末尾时,返回null,其原理还是与缓冲区关联的流对象的read方法,只不过每一次读取到一个字符,先不进行具体操作,先进行临时存储,当读取到回车标记时,将临时容器中存储的数据一次性返回

 

2、转换流(InputStreamReader / OutputStreamWriter)

该类型是字节流和字符流之间的桥梁,该流对象中可以对读取到的字节数据进行指定编码的编码转换

构造函数主要有:InputStreamReader(InputStream);

        InputStreamReader(InputStream,String charSet);

        OutputStreamWriter(OutputStream);

        OutputStreamWriter(OutputStream,String charSet);

 

3、数据流(DataInputStream / DataOutputStream)

该数据流可以方便地对一些基本类型数据进行直接的存储和读取,不需要再进一步进行转换,通常只要操作基本数据类型的数据,就需要通过DataStream进行包装

构造方法:DataInputStream(InputStream)

     DataOutputStream(OutputStream)

方法举例:

    int readInt();

    writeInt(int);

    short readShort();

    writeShort(short);

    String readUTF();

    writeUTF(String)

注意:在使用数据流读/存数据的时候,需要有一定的顺序,即某个类型的数据先写入就必须先读出,服从先进先出的原则

 

4、打印流

PrintStream是一个字节打印流,System.out对应的类型就是PrintStream,它的构造函数可以接受三种数据类型的值:1.字符串路径。2.File对象。3.OutputStream

PrintWriter是一个字符打印流

 

5、对象流

该类型的流可以把类作为一个整体进行存取,主要方法有:

Object readObject()  该方法抛出异常:ClassNotFountException

void writeObject(Object) :被写入的对象必须实现一个接口:Serializable,否则就会抛出:NotSerializableException

Java IO流

标签:

原文地址:http://www.cnblogs.com/keifer/p/4571334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!