资讯详情

java基础知识I/O流怎么使用

2017-05-23 阅读:54 来源:阁瑞钛伦特软件培训学校
进入>

java基础知识I/O流怎么使用?

一.java.io包中的类对应两类流

一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流,其他的流则称为过滤流(包装流)

过滤流:一些流可以从文件以及其他地方接收字节,另一些流可以将字节组合成更有用的数据类型。将一个已经存在的流传递给另一个流的构造方法,将这两种流结合起来,结合后的流被称为过滤流。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流也类似。我们很少用单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能(即装饰器设计模式)。

java的常用输入、输出流其实都是继承自4个抽象类,分别是:

基于单字节的InputStream,OutputStream类(面向字节形式的I/O)

基于双字节的Unicode代码单元的Reader,Writer类(面向字符形式的I/O)

一旦打开输入流后,程序就可从输入流串行地读数据。从输入流读/写数据的过程一般如下:打开一个流通道-->读取/写信息-->关闭流通道。

在java平台中,有以下两种方式能获得本地平台的字符编码类型:

(a)System.getProperty("file.encoding");

(b)Charsetcs=Charset.defaultCharset();

所有的输入流、输出流都可以分为字节(输入、输出)流,字符(输入、输出)流,处理字节的主要是(OutputStream/InputStream)系列,处理字符的,主要是(Reader/Write)系列

二.以字节(Byte)为导向的输入流(InputStream系列),这几个类都可以与FileInputStream对象相连以提供有用接口:

ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用

StringBufferInputStream(在java1.1中已经弃用了):把一个String对象作为InputStream,底层实现使用StringBuffer

FileInputStream:把一个文件作为InputStream,实现对文件的读取操作(文件名、文件、FileDescriptor对象)

PipedInputStream:实现了pipe的概念,主要在线程中使用(作为多进程中的数据源)

SequenceInputStream:把多个InputStream合并为一个InputStream

以字节(Byte)为导向的输出流(OutputStream系列),可以与FilterOutputStream对象相连以提供有用接口:

ByteArrayOutputStream:在内存中创建缓冲区,把信息存入内存中的一个缓冲区中,缓冲区初始化尺寸(可选)

FileOutputStream:把信息存入文件中(文件名、文件、FileDescriptor)

PipedOutputStream:实现了pipe的概念,主要在线程中使用(指定用于多线程的数据的目的地)

三.与之对应的(Reader/Writer)系列:

Reader:与InputStream相对应,适配器InputStreamReader

Writer:与OutputStream相对应,适配器为OutputStreamWriter

FileReader:与FileOutputStream相对应

FileWriter:与FileOurputStream相对应

StringReader:无相对应的类

StringWriter:与ByteArrayInputStream相对应

CharArrayReader:与ByteArrayOutputStream相对应

CharArrayWriter:与ByteArrayOutputStream相对应

PipedReader:与PipedInputStream相对应

PipedWriter:与PipedOutputStream相对应

四.两种不限导向的stream之间的转换(使用适配器类)

InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。

InputStreamReader是字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集

OutputStreamWriter是字符流通向字节流的桥梁:可使用指定的charset将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集

五.通过FilterInputStream从InputStream读取数据:

DataInputStream:从stream中读取基本类型(int、char,long等)数据。

BufferedInputStream:使用缓冲区,使用它可以防止每次读取都得进行实际的读操作

LineNumberInputStream:会记录inputstream内的行数,然后可调用getLineNumber()和setLineNumber(int)

PushbackInputStream:很少用到,一般用于编译器开发

通过FilterOutputStream向OutputStream写入:

DataIOutputStream:可以按照移植方式往stream中输出基本类型(int、char,long等)数据。

BufferedOutputStream:使用缓冲区,使用它可避免每次发送数据都进行实际的写操作

PrintStream:产生格式化输出,其中DataOutputStream处理数据的存储,PrintStream处理显示

六.更改流的行为

尽管BufferedOutputStream是FilterOutputStream的子类,但是BufferedWriter并不是FilterWriter的子类,(FilterWriter是抽象类,没有任何子类)

没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream

BufferedReader:与BufferedInputStream对应

LineNumberReader:与LineNumberInputStream对应

PushBackReader:与PushbackInputStream对应

BufferedWrite:与BufferedOutStream对应

PrintWrite:与PrintStream对应

七.自我独立的类:RandomAccessFile

这个类适用于有大小已知的记录组成的文件,RandomAccessFile除了实现了DataInput和DataOutput接口(DataInputStream和DataOutputStream也实现了这两个接口)之外,这个类是个完全独立的类,它拥有和别的I/O类型本质不同的行为,可以在一个文件内向前和向后移动,直接从Object派生而来。

可通过RandomAccessFile对象完成对文件的读写操作

在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写

可以直接跳到文件中指定的位置

RandomAccessFile的大部分功能(不是全部)有nio存储映射文件所取代

加载全文

免责声明:本站部分内容、图片来自用户自主上传,如果您对本站信息资源版权的归属问题存有异议,请您致信,我们会立即做出答复并及时解决。如果您认为本站有侵犯您权益的行为,请通知我们,我们一定根据实际情况及时处理。

以上是阁瑞钛伦特软件培训学校为大家整理的有关java基础知识I/O流怎么使用的全部内容,更多精彩请访问学习资讯新闻专栏。

相关课程

更多>
2020猎学网广告栏
申请课程免费试听名额

课程顾问24小时内联系您

你好

顾问将于24小时内联系您!

确定
在线咨询 微信咨询 立即报名
申请1对1课程顾问咨询服务
×
你好

顾问将于24小时内联系您!

确定
北京猎学网 >阁瑞钛伦特软件培训学校 >java基础知识I/O流怎么使用