A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 478883662 中级黑马   /  2015-11-5 23:50  /  324 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、IO流的四个抽象基类

InputStream、Reader:所有输入流的基类,前者表字节输入流,后者为字符流;

OutputStream、Writer:输出流的基类,前者为字节输出流,后者为字符输出流;

字节流操作的最小数据单元为8位的字节,字符流操作的最小单元为占16位的字符;

2、输入流的方法(以字节流为例,字符流操作的是字符文本,只需把参数类型改为char即可):

int read():读取单个字节;

int read(byte[] b):从输入流中读取最多b.length个字节,并存储在字节数组b中,返回读取的字节数;

int read(byte[] b,int off,int len):从输入流中读取最多len个字节的数据,数组的off位置开始存储在数组b中,返回读取的字节数。

3、输出流的方法:void write(···),原理同输入流相差不大,只是是将字节或字符或字符串输出到输出流总,OutputStream类可操作的是字节和字符,Writer类操作的是字符串。

4、IO流还分节点流和处理流

节点流是与底层的I/O设备和文件交互,



处理流用来包装节点流,一般该流构造器里参数是一个已存在的流。

5、四个基类的前面分别添上Buffered,就成了缓冲流,缓冲流可以提高输入输出的效率,因为缓冲流是将数据存入到缓冲区中,所以一定要flush()才可以写入目的。BufferedReader中有一个读一行的方法,即readLine(),需注意此方法返回的时候只返回回车符之前的数据内容,并不返回回车符,所以在对应输出流写数据的时候还需要newLine()一下。

一段典型的使用到缓冲区和读写操作的简单代码:

view plaincopy to clipboardprint?
import java.io.*;
public class CopyPic2 {
publicstaticvoid main(String[] args)throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("f:\\1.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("g:\\2.jpg"));
byte[] buf =newbyte[1024];
int len =0;
while((len=bis.read(buf))!=-1){
bos.write(buf, 0, len);
}
bis.close();
bos.close();
}
}
[java] view plaincopyprint?
import java.io.*;  
public class CopyPic2 {  
    public static void main(String[] args) throws IOException{  
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("f:\\1.jpg"));  
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("g:\\2.jpg"));  
        byte[] buf = new byte[1024];  
        int len = 0;  
        while((len=bis.read(buf))!=-1){  
            bos.write(buf, 0, len);  
        }  
        bis.close();  
        bos.close();  
    }  
}  
6、打印流:PrintStream和PrintWriter,输出功能更强大

7、转换流,将字节流转换成字符流,一般用于键盘输入相关

分别是InputStreamReader和OutputStreamWriter。

8、标准输入/输出,System.in 和 System.out,三个重定向方法:

Static void setErr(PrintStream err):重定向标准错误输出流;

Static void setIn(InputStream in):重定向输入流;

Static void setOut(PrintStream out):重定向标准输出流。

9、RandomAccessFile:功能强大的文件内容访问类,能随机读写

因为可以自由定位文件记录指针,所以可以不像其它流一样从头读到尾,它其实是在内部封装了一个byte数组,通过指针对该数组进行操作,该类操作指针的方法:

long getFilePoint():返回文件记录指针的当前位置;

void seek(long pos):将文件记录指针定位到pos位置。

创建RandomAccessFile对象时需指定一个mode参数,设置对文件操作的权限。

10、管道流,使用管道流类,可以实现各个程序模块之间的松耦合通信。

1、PipedInputStream和PipedOutputStream用于在应用程序中创建管道通信。
一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接来产生一个通信管道。主要用来完成线程之间的通信。
2、PipedReader和PipedWriter用来创建字符文本的管道通信。

11、对象流

为了将某类对象(object)转换成字节序列(二进制流),保存到磁盘上,可将对象序列化,则该对象的类设计时需要实现Serializable接口,此接口是一个标记接口,所以不用实现任何方法,将对象序列化用ObjectOutputStream的writeObject()方法,格式为:

输出流对象.writeObject(需被序列化的对象);

如果要从二进制流中恢复成原来的对象,则使用反序列化,用ObjectInputStream中的readObject()方法,格式:

//创建一个ObjectInputStream对象

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(""object.txt"));

//从输入流中读取对象,强制转换成原来的类

类 实例 = (类)ois.readObject();

12、凡是设计到操作系统资源的,用了之后都要关资源,

13、其它流对象

DataInputStream与DataOutputStream:用于操作基本数据类型的数据的流;

ByteArrayInputStream与ByteArrayOutputStream:操作字节数组的流;

CharArrayReader与CharArrayWriter:操作字符数组的流

StringReader与StringWriter:访问字符串的流
一起来学习,分享!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马