java之IO

本文详细介绍了Java IO流的基本概念及各类流的使用方法,包括输入输出流、字节流与字符流的区别,节点流与处理流的特点,以及各种常见流如FileInputStream、BufferedReader、DataOutputStream等的功能和应用场景。

1:流分类(java.io)
按方向:输入流输出流(站在程序角度)
按处理数据单位不同:字节流/字符流
按照功能不同:节点流/处理流


java.io内定义的所有流类型都分别继承自以下四种抽象流类型
               字节流               字符流
 
输入流         InputStream          Reader


输出流         OutputStream         Writer


节点流:为可以从一个特点的数据源(节点)读写数据(如文件,内存)
处理流:是连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序员提供更强大的读写功能


2:InputStream的子类
继承自InputStream的流都属于向程序输入数据,且数据的单位为字节(8位)
其中处理流:FilterInputStream/SequenceInputStream/ObjectInputStream
其中节点流:FileInputStream/PipedInputStream/ByteArrayInputStream/StringBufferInputSteam

继承FilterInputStream的只有处理流
LineNumberInputStream/DataInputStream/BufferedInputStream/PushbackInputStream

基本方法(所有方法都会抛出IOException)
int read() throws IOException/读取一个字节,返回-1表示已到输入流末尾,否则返回(0-255)
int read(byte [] buffer)/读取一系列字节存储到buffer里,返回实际读取的字节数,如果读前已到输入流末尾返回-1
int read(byte[] buffer,int offset,int length)/读取length个字节,从buffer的offset位开始存,返回实际读取的字节数
void close()/关闭字节输入流
long skip(long n)/跳过n个字节不读,返回实际跳过的字节数

 

3:OutputStream的子类
处理流:FilterOutputStream/ObjectOutputStream
节点流:FileOutputStream/PipedOutputStream/ByteArrayOutputStream

其中FilterOutputStream的处理流子类
DataOutputStream/BufferedOutputStream/PrintStream

基本方法(所有方法都会throws IOException)
void write(int b)/向输入流写入一个字节数据,给字节数据为参数b的低八位
void write(byte[] b)/将字节数组b的所有数据写入输出流
void write(byte[] b,int off,int len)/将b字节数组从off开始的len个字节数组写入到输出流
void close()/
void flush()/将输出流中缓冲的数据全部写入到目的地

 

4:Reader的子类(处理单位为字符(两个子节))
处理流:BufferedReader/InputStreamReader/FilterReader
节点流:CharArrayReader/PipedReader/StringReader

其中:
BufferedReader->LineNumberReader(处理流)
InputStreamReader->FileReader(节点流)
FilterReader->PushbackReader(处理流)

基本方法 (全都throws IOException)
int read()/读取一个字符并以整数的形式返回(0-255),返回-1如果到输入流的末尾
int read(char[] c)/返回实际读取的字符数
int read(char[] c,int offset,int length)/
void close()/
long skip(long l)/


5:Writer(用于程序输出数据,数据单位为字符)
子类
处理流:BufferedWriter/OutputStreamReader/FilterWriter
节点流:CharArrayWriter/PipedWriter/StringWriter
其中
OutputStreamReader->FileWriter(节点流)

基本方法(都会抛出 throws IOException)
void write(int b)/将b的低16位写入输出流
void write(char[] c)/
void write(char[] c,int offset,int length)/
void write(String s)/调用String的toCharArray方法
void write(String s,int offset,int length)/
void close()/
void flush()/


6:节点流类型
类型                             字符流                         字节流
File(文件)               FileReader/FileWriter               FileInputStream/FileOutSteam

Memort Array(内存数组)     CharArrayReader/CharArrayWriter     ByteArrayInputStream/ByteArrayOutputStream

Memory String(内存字符)    StringReader/StringWriter               无

Pipe(管道)                   PipedReader/PipedWriter           PipedInputStream/PipedOutputStream


7:FileInputStream/FileOutputStream(里面的构造函数都throws FileNotFoundException)
FileInputStream/FileOutputStream(String name/File file)/构造文件输入/输出流
调用(InputStream/OutputStream)里面的read()/write()/read(byte[] b)/write(byte[])
   特殊:FileOutputStream(File f/String name,boolean appeand)/重写文件,还是在文件末尾重写(不覆盖原理内容)

FileReader/FileWriter(FileReader 的构造函数throws FileNotFoundException,FileWriter 的构造函数throwsIOException(因为当文件不存在时会自动创建一个文件))
FileReader/FileWriter(File f/String filename)/构造文件输入输出流
调用Reader/Writer里的read()/write()/read(char[] c)/write(char[] c)

 


8:处理流类型

  处理类型                                字符流                                 字节流
Buffering(缓冲流)               BufferedReader/BufferedWriter            BufferedInputStream/BufferedOutputStream

Filtering                       FilterReader/FilterWriter                 FilterInputStream/FilterOutputStream

Converting between (转换流)          InputStreamReader                           无
bytes and character                    OutputStreamWriter                          无

Object Serialization                         无                           ObjectInputStream/ObjectOutputStream

Data conversion                              无                            DataInputStream/DataOutputStream

Counting                            LineNumberReader                          LineNumberInputStreeam

Peeking ahead                        PushbackReader                           PushbackInputStream

Printing                               PrintWriter                             PrintStream                     

 

9:缓冲流(BuffferReader/BufferedWriter/BufferedInputStream/BufferedOutputStream)
套在相应节点流上,对读写数据提供缓冲功能,提高读写效率,同时增加了些新方法

构造函数
BufferedReader(Reader in (int sz))/sz是自定义缓冲区大小
BufferedWriter(Writer out (int sz))/sz是自定义缓冲区大小
BufferedInputStream(InputStream in(int sz))/
BufferedOutputStream(OutputStream out(int sz))/

1.缓冲输入流支持父类的mark(int readAheadLimit)(标记一个位置,并重当前开始读)/reset()(回到标记位)
2.BufferedReader 提供readLine()读取一行字符串(以\r或\n分隔)
3.BufferWriter 提供了newLine用于写入一个行分隔符
4.对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法将会使内存的数据立刻写出

 

10:转换流(InputStreamReader/OutputStreamWriter)
1.用于字节数据到字符数据之间的转换
2.InputStreamReader 需要和InputStream套接
3.OutputStreamWriter需要和OutputStream套接
4.转换流构造时可指定其编码集合/InputStream isr = new InputStreamReader(System.in,"ISO8859_1");

当需要用BufferedReader读取一行字节输入流时(因为BufferedReader有一个好用的readLine()方法),可以先用InputStreamReader把字节数据转换成字符数据
在调用BufferedReader.(比如System.in字节输入流)

常用构造函数
InputStreamReader(InputStream in (String charsetName))/后面的参数是编码方式
OutputStreamWriter(OutputStream out,(String charsetName))/
特殊方法
getEncoding()/获得当前流的编码方式(两个类都有该方法)
read(char[] c(,int offset,int length))/转化了,所有参数可以是字符数组
write(char[] c/String s)/

 

11:数据流(DataInputStream/DataOutputStream)和内存数组字节流类型(ByteArrayInputStream/ByteArrayOutputStream)
1.分别继承InputStream/OutputStream,属于处理流,需要分别套接在InputStream/OutputStream类型的节点流上
2.提供了可以存取与机器类型无关的java原始数据类型(如int,double等)的方法

内存数组字节流类型构造函数:
new ByteOutputStream((int size))/在内存构造一个字节数组,大小为size,并存在一条管道指向它
new ByteInputStream(byte[] b(,int offset,int length))/构造指向b字节数组的输入管道

ByteInputStream特殊方法
int available()/可以读取多少个数组

ByteOutputStream特殊方法
size()/当前指向的字节数组大小
toByteArray()/得到当前指向的字节数组
String toString()/把当前指向的字节数组转换成字符串

数据流构造方法
new DataInputStream(InputStream in)/
new DataOutputStream(OutputStream out)/

DataInputStream特殊方法
boolean readBoolean()/读一个boolean型数据
Byte readByte()/读一个字节数据
...
char readChar()/
double readDouble()/
void readFully(byte[] b(int offset,int length))/
String readLine()/底层调用了InputStreamReader和BufferReader
readUTF()/

DataOutputStream
void write(boolean b)/
void write(double d)/
....
void writeChars(String s)/
void writeChar(int v)/将v两个低位字节写入
void writeUTF()/
注意:没writeChar(char c)

 

12:打印流(Print流)PrintWriter/PrintStream分别针对字符/字节(可以向窗口,文件等打印数据)
1.提供重载的print/println用于多种数据类型输出
2.这两个类的输出操作不会抛出异常(用户通过检测错误状态获取错误信息)
3.PrinteWriter/PrintStream 有自可以动flush()功能(用参数true)

构造函数
PrintWriter(Writer out/OutputStream out)/
PrintWriter(Writer out/OutputStream out,boolean autoFlush)/后一个参数决定是否自动flush
PrintStream(OutputStream)/
PrintStream(OutputSteam,boolean autoFlush)/

特殊方法:
除了常用的read/write外,还可以用print/println写入

 

13:Object流ObjectOutputStream/ObjectInputStream(当要将Object整个写入硬盘时,需要实现Serializable序列化(没什么作用,就是一个标记,意味着该类可以序列化))
1.直接将整个Object(转化成字节流)写入或读出
2.关键字transient(透明化)用该关键字修饰某成员变量时,写入整个Object时(该变量的值不会写入,使用默认值)

3.构造函数
new ObiectOutputStream/ObjectInputStream(/OutputStream/InputStream)

4.两个常用方法
Object readObject();
void writeObject();
还有很多readLong()...等方法

5:还有一个接口Externalizable重写可实现自己定义的Object序列化方法

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值