IO的简单总结

一、四种基本抽象类

  1. InputStream 字节输入流
  2. OutputStream 字节输出流
  3. Reader 字符输入流
  4. Writer 字符输出流

1.InputStream 字节输入流

//常用方法
abstract int read();	//读取一个字节,并返回,到结尾返回-1.
int read(byte[] b);	//读取一个字节数组,返回实际读入的字节数,或者碰到输入流的结尾时返回-1。
int read(byte[] b,int off,int len);	//读入一个字节数组。off表示第一个字节的偏移量,len表示读入最大字节量
void close();	//关闭流

2.OutputStream 字节输出流

//常用方法
abstract void write(int n);	//写出一个字节的数据
void write(byte[] b);	
int write(byte[] b,int off,int len);	//写入一个字节数组。off表示第一个字节的偏移量,len表示写入最大字节量
void close();	//关闭流
void flush();	//刷新

3.Reader 字符输入流

protected  Reader() 
//创建一个新的字符流 reader,其重要部分将同步其自身的 reader。 
protected  Reader(Object lock) 
//创建一个新的字符流 reader,其重要部分将同步给定的对象。 

4.Writer 字符输出流

protected	Writer()
//创建一个新的字符流其关键部分将同步 writer 自身。
protected	Writer(Object lock)
//创建一个新的字符流写,其关键部分将同步给定的对象。

二、字节流

1.FileInputStream 文件字节输入流(常用)

//构造方法
FileInputStream input = FileInputStream(String name);
FileInputStream input = FileInputStream(File file);
//创建一个带缓冲区的输入流。带缓冲区的输入流从流中读取字符时,不会每次都会对设备进行访问。当缓冲区为空时,会向缓冲区中读入一个新的数据块
BufferedInputStream bufferedInput = new BufferedInputStream(InputStream实例对象);

2.FileOutputStream 字节输出流(常用)

//构造方法
FileOutputStream output = FileOutputStream(String name);
FileOutputStream output = FileOutputStream(File file);
//append参数为true表示数据会追加到文件末尾,不写默认为清空数据重新写
FileOutputStream output = FileOutputStream(String name,boolean append);
FileOutputStream output = FileOutputStream(File file,boolean append);
//创建一个带缓冲区的输出流。带缓冲区的输出流在收集要写出的字符时,不会每次都对设备访问,当缓冲区填满或当被刷新时,数据就被写出。
BufferedOutputStream bufferedOutput = new BufferedOutputStream(OutputStream实例对象);

举一个用FileInputStream类和FileOutputStream类完成文件复制的栗子

//使用字节数组完成图片文件的复制
public class CopyPicture {
    public static void main(String[] args) throws IOException {
        //创建输入流和输出流对象
        FileInputStream input = new FileInputStream("d:\\Test\\照片.jpg");
        FileOutputStream output = new FileOutputStream("d:\\target\\copy照片.jpg");
        //边读边写,为加快复制速度,传入byte类型的字节数组
        int readCount;
        byte[] bytes = new byte[1024];
        while ((readCount = input.read(bytes)) != -1)output.write(bytes);
        input.close();
        output.close();
    }
}

3.BufferedInputStream

构造方法

BufferedInputStream(InputStream in)创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。(默认缓冲区大小8KB)
BufferedInputStream(InputStream in, int size)创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用

read()方法

int read()参见 InputStream 的 read 方法的常规协定。
int read(byte[] b, int off, int len)从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。

4.BufferedOutputStream

构造方法

BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流,以将数据写入指定的底层输出流。(默认缓冲区大小是8KB)
BufferedOutputStream(OutputStream out, int size)创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流

write方法

void write(byte[] b, int off, int len)将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。
void write(int b)将指定的字节写入此缓冲的输出流。

三、字符流

1.InputStreamReader(字符集转换流)

//构造方法
InputStreamReader(InputStream in) 
//创建一个使用默认字符集的InputStreamReader。 
InputStreamReader(InputStream in, Charset cs) 
//创建使用给定字符集的 InputStreamReader。 
InputStreamReader(InputStream in, CharsetDecoder dec) 
//创建使用给定字符集解码器的 InputStreamReader。 
InputStreamReader(InputStream in, String charsetName) 
//创建使用指定字符集的 InputStreamReader。 

2.OutputStreamWriter (字符集转换流)

OutputStreamWriter(OutputStream out) 
//创建使用默认字符编码的 OutputStreamWriter。 
OutputStreamWriter(OutputStream out, Charset cs) 
//创建使用给定字符集的 OutputStreamWriter。 
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 
//创建使用给定字符集编码器的 OutputStreamWriter。 
OutputStreamWriter(OutputStream out, String charsetName) 
//创建使用指定字符集的 OutputStreamWriter。 

3.FileWriter和FileReader简化流

构造方法

FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

成员方法(可以直接写入字符串

voidwrite(char[] cbuf) 写入字符数组。
abstract voidwrite(char[] cbuf, int off, int len) 写入字符数组的某一部分。
voidwrite(int c) 写入单个字符。
voidwrite(String str) 写入字符串。
voidwrite(String str, int off, int len) 写入字符串的某一部分。

构造方法

FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
简化流 VS 转化流
  • 从使用便捷角度看,简化流更方便
  • 转化流可以指定字符集 对于简化流只能使用默认的字符集

4.缓冲流BufferedWriter和BufferedReader

构造方法

BufferedWriter(Writer out)创建一个使用默认大小输出缓冲区的缓冲字符输出流。(默认缓冲区16KB)
BufferedWriter(Writer out, int sz)创建一个使用给定大小输出缓冲区的新缓冲字符输出流。

独有的方法

voidnewLine() 写入一个行分隔符。

构造方法

BufferedReader(Reader in)创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)创建一个使用指定大小输入缓冲区的缓冲字符输入流。

独有方法

StringreadLine() 读取一个文本行。

可以读写行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; @SuppressWarnings("serial") //一个类要想实现序列化则必须实现Serializable接口 class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return "Name:" + this.name + ", Age:" + this.age; } } public class Demo { public static void main(String[] args) { String path = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator + "demo.txt"; Person p1 = new Person("zhangsan",12); Person p2 = new Person("lisi",14); //此处创建文件写入流的引用是要给ObjectOutputStream的构造函数玩儿 FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = new FileOutputStream(path); oos = new ObjectOutputStream(fos); //这里可以写入对象,也可以写入其他类型数据 oos.writeObject(p1); oos.writeObject(p2); } catch (IOException e) { e.printStackTrace(); } finally { try { oos.close(); } catch (IOException e) { e.printStackTrace(); } } } } 解压密码 www.jiangyea.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值