InputStream与OutputStream以及其子类

Java类库中的I/O类分成输入和输出两个部分。通过继承,任何自InputStream或Reader派生而来的类都含有名为read()的基本方法,用于读取单个字节或者字节数组。同样,任何自OutputStream或Writer派生而来的类都含有名为write()的基本方法,用于写单个字节或字节数组。

下面介绍三种继承自InputStream的子类:

一、FileInputStream、FileOutputStream

FileInputStream,用于从文件中读取信息。FileOutputStream, 用于将信息写至文件。

具体代码实现如下:

public class InputStream1 {
	public static void main(String[] args) {
		String fileName = "D:"+File.separator+"file.txt";
		File file = new File(fileName);
		if(!file.exists()){
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//FileOutputStream、FileInputStream文件操作流
		try {
			OutputStream os = new FileOutputStream(file);
			String str = "大家好!";
			byte[] a = str.getBytes();
			os.write(a);
			os.close();
			InputStream in = new FileInputStream(file);
			byte[] b = new byte[(int) file.length()];
			in.read(b);
			in.close();
			System.out.println(new String(b));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}	

二、ByteArrayInputStream、ByteArrayOutputStream

ByteArrayInputStream允许将内存的缓存区当作InputStream使用。 ByteArrayInputStream在内存中创建缓冲区,所有送往"流"的数据都要放置在此缓冲区。

具体代码实现如下:

//ByteArrayInputStream、ByteArrayOutputStream
		try {
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			int a = 0;
			int b = 1;
			int c = 2;
			bos.write(a);
			bos.write(b);
			bos.write(c);
			//获取内存缓冲中的数据
			byte[] buf = bos.toByteArray();
			bos.close();
			ByteArrayInputStream bin = new ByteArrayInputStream(buf);
			int data = 0;
			while((data=bin.read())!=-1){
				System.out.println(data);
			}
			bin.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

三、PipedInputStream、PipedOutputStream

PipedInputStream产生用于写入相关PipedOutputStream的数据,实现"管道化"概念。 PipedOutputStream任何写入其中的信息都会自动作为相关PipedInputStream的输出。实现"管道化"概念。

具体代码实现如下:

//PipedInputStream、PipedOutputStream
		Sender sender = new Sender();
		Receiver receiver = new Receiver();
		PipedOutputStream outStream = sender.getOutStream();
		PipedInputStream inStream = receiver.getInStream();
		try {
			//使用connection()方法将其相连。
			outStream.connect(inStream);
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		sender.start();
		receiver.start();
	}
}
class Sender extends Thread{
	private PipedOutputStream outStream = new PipedOutputStream();
	public PipedOutputStream getOutStream() {
		return outStream;
	}
	public void run() {
		String info = "hello world!";
		try {
			outStream.write(info.getBytes());
			outStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

class Receiver extends Thread {
	private PipedInputStream inStream = new PipedInputStream();
	public PipedInputStream getInStream() {
		return inStream;
	}
	public void run() {
		byte[] buf = new byte[1024];
		try {
			inStream.read(buf);
			System.out.println("receive message from sender : "
					+ new String(buf));
			inStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
时间: 2024-10-07 23:01:53

InputStream与OutputStream以及其子类的相关文章

02JavaIO详解_IOl流的三种分类以及InputStream和OutputStream

IO流指的就是输入流和输出流.怎么定义输入和输出流呢,以程序为参考,流入到程序里就是输入流,从程序里面流出去就是输出流. 输入/输出流的介绍: 流有三种分类: 1.  从功能上分为:输入流和输出流. 2.从流结构上分为:字节流和字符流. 3.节点流和过滤流. 说明:上面提到了字节流和字符流.其实字符流就是以字节流为基础的,我们操纵String更加方便啊,所以有了字符流.字节流掌握好以后,字符流就很简单了. 字符流和字节流的说明: 字节流的基础是InputStream和OutputStream.我

Java流家族之InputStream、OutputStream

Java流家族之InputStream 实现的接口: Closeable , AutoCloseable 已知直接子类: AudioInputStream , ByteArrayInputStream , FileInputStream , FilterInputStream , InputStream , ObjectInputStream PipedInputStream , SequenceInputStream , StringBufferInputStream 具体的方法: Modif

InputStream和outputStream

java.io包中提供了很丰富的输入.输出流对象,如: 基于字节流的stream: DataOutputStream----DataInputStream: FileOutputStream-----FileInputStream: .............等,可以用InputStream和OutputStream从JDK文档查阅 基于字符流的stream(典型的以write和reader来标识的): FileWriter---FileReader: StringWriter---String

java的InputStream和OutputStream的理解【转】

1.在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头)2.任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象既然它能产生出数据,我们就可以将数据取出,java对封装的通用方法就read()方法了--(出水龙头)3.任何有能力接收数据源(流)的javaio对象我们就可以看作是一个OutputStream对象同样,它能接收数据,我们就可以调用它的write方法,来让它接收数据--(进水龙头了,呵呵)4.当然,我们可以在I

Java之IO(一)InputStream和OutputStream

转载请注明源出处:http://www.cnblogs.com/lighten/p/6964702.html 1.前言 计算机的IO操作一直都是比较重要的一环,IO顾名思义,就是输入输出流.不管是磁盘IO还是网络IO,数据流转就离不开IO,理解Java的IO操作类很重要,本文介绍IO的抽象父类InputStream和OutputStream,这是Java的IO操作基础,理解完抽象类,对于其它的IO流也有很大的帮助. 流都实现了Closeable接口,也就是都需要关闭.输出流额外实现了一个Flus

java(jdk1.7) IO系列01之InputStream和OutputStream解析

1.InputStream和OutputStream简介 在java中InputStream和OutputStream分别代表字节输入流和字节输出流,表示以字节的方式来实现进程或者程序的通信,InputStream是输入流,表示以字节的方式从文件(FileInputStream)或者字节数组(ByteArrayInputStream)等读取数据,与之相对应的OutputStream是输出流,表示以字节的方式向文件(FileOutputStream)或者字节数组(ByteArrayOutputSt

java IO(二):字节流(InputStream和OutputStream)

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

Java流对象:InputStream、OutputStream、Reader、Writer

流对象使用完一般要用close方法关闭.释放资源. InputStream 和OutPutStream 二者都是字节输入和输出的抽象父类,子字节为单位处理数据,每次读取.写入一个字节,适合处理二进制文件,如:音频.视频.图片等. Redaer和writer是字符输入输出的抽象父类,以字符为单位处理数据,每次读取或写入一个字符,适合处理文本文件,实现类有FileReader和FileWriter. 附:Java代码实现图片文件的拷贝: package com.buaa.comparable; im

【转载】关于java 的InputStream和OutputStream的理解

关于InputStream和OutputStream的输入输出方向的理解 InputStream输入类,首先需要读取的内容转化成输入流,再从它那里进行读取,先关联源:之后过程中关联目的,这样形成了流: 把要读取的内容输入到输入流,再从输入流进行读取,所以是read() OutputStream输出类,首先需要与写入的目的地相关联,然后通过它进行写入,首先关联的是流的目的:之后的过程中再关联源,这样形成了流 把要输出的东西通过输出流输出到目的地,所以是write() 下面的例子就是将f中的内容读至