Java IO流(二)

JAVA    IO(二)

字节流(stream)

字节读入流(InputStream

此抽象类是表示字节输入流的所有类的超类。子类如下:

1.FileInputStream

从某个文本文件系统的文件中获得输入字节。如表示图像、音乐、电影的文件可以用FileInputStream来读取。

/**
	 * 读取图片的数据写进另一个图片里
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			FileInputStream fi = new FileInputStream("F:\\2.jpg");
			FileOutputStream fou = new FileOutputStream("F:\\3.jpg");
			int len;
			try {
				while((len = fi.read()) != -1){
					fou.write(len);
				}
				fou.close();
				fi.close();
				
			} catch (IOException e) {
				
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		}  
	}


 

2.FilterInputStream

包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。FilterInputStream 类本身只是简单地重写那些将所有请求传递给所包含输入流的 InputStream 的所有方法。FilterInputStream 的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。 

3.BufferedInputStream

BufferedInputStream 为另一个输入流添加一些功能,该类本身提供一个缓冲区,在读取文件的时候,先向该缓冲区中读入字节,再将缓冲的字节数组读取出来。提供的额外功能有mark(),reset();

/**
	 * 从键盘上读取输入的数据,并显示到控制台上
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		BufferedInputStream bi = new BufferedInputStream(System.in); 
		BufferedOutputStream bou = new BufferedOutputStream(System.out);
		
		int len;
		
		while((len = bi.read()) != -1){
			bou.write(len);
			bou.flush();
		}
		
		bou.close();
		bi.close();
	}


 

4.ObjectInputStream

将写入到ObjectOutStream的基本数据和J对象进行反序列化,可以实现对象的持久化存储,只有支持Serializable 或 Externalizable 的对象才可以从流中读取。

/**
	 *将person类写入“a.txt"中 并从中取出写入的person类对象,输出 姓名和年龄
	 * @param args
	 * @throws FileNotFoundException 
	 * @throws IOException 
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
		ObjectOutputStream obout = new ObjectOutputStream(new FileOutputStream("F:\\a.txt"));
		obout.writeObject(new person("zhangsan",10));
		obout.writeObject(new person("lisi",20));
		obout.writeObject(new person("wangwu",30));
		obout.close();
		
		ObjectInputStream obin = new ObjectInputStream(new FileInputStream("F:\\a.txt"));
		
		person p1 = (person) obin.readObject();
		person p2 = (person) obin.readObject();
		person p3 = (person) obin.readObject();
		System.out.println(p1.getName()+":"+p1.getAge());
		System.out.println(p2.getName()+":"+p2.getAge());
		System.out.println(p3.getName()+":"+p3.getAge());
		obin.close();
	}


 

5.DataInputSteam

允许程序从输入流中读入基本Java数据类型的数据,对于线程的访问不一定是安全的。

/**
	 *向"a.txt"中写如boolean类型的数据,并从中读取出来,打印到控制台
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException{
		
		DataOutputStream dout = new DataOutputStream(new FileOutputStream("F:\\a.txt"));
		
		dout.writeBoolean(true);
		dout.flush();
		dout.close();
		DataInputStream din = new DataInputStream(new FileInputStream("F:\\a.txt"));
		boolean b = din.readBoolean();
		din.close();
		System.out.println(b);
	}


 

6.PipedInputSteam

  管道输入流应该和管道输出流同时使用,即连接到管道输出流,管道输入流提供要写入的所有数据。建议使用多个线程分别对他们进行操作,不然会照成死锁现象,另外它还包含一个缓冲区。

 可以参考PipedReader的用法。

字节写入流(OutputStream

抽象类是表示输出字节流的所有类的超类。子类如下:

1. FileOutputStream

文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。由于写入的是字节数据,若要写入如图像、音乐、电影的文件时,使用该类。

2. FilterOutputStream

是所有过滤输出流的超类。此流位于已存在的输出流之上,它们将已存在的输出流作为其基本数据接收器,但可能直接传输数据或提供一些额外的功能。 如以下子类:

BufferedOutputStreaem,DataOutputstream,PrintStream

 

3. BufferedOutputStream

包含一个缓冲区,建立在其它流的基础上。向用字节表示的文件写数据时,先将数据写入该类的缓冲区,再向目的地中写入数据。

4. PrintStream

为其它输出流提供了额外的功能,实现了自动刷新,如println()方法,另外该类永远不会抛出异常。PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。

PrintStream pou = new  PrintStream(System.out,true); 即可实现自动刷新的功能。

5. DataObjectStream

数据输出流允许程序将基本 Java 数据类型写入输出流中。

6. ObjectOutputStream

可以将Java对象写入到输出流中,使用ObectInputStream读取Java对象,可以实现对象的持久存储。另外,它只支持实现Serializable 接口的对象,

7. PipedOutputSteam

管道读取流需要和管道输入流同时使用,即连接到输入流形成管道信道。建议使用多个线程分别对它们进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值