lesson6.6PipedInputStream和ByteArrayInputStream类

PipedInputStream类和PipedOutputStream类用于创造管道通信,两者连接产生管道,前者从管道中读取数据,后者向管道中写入数据,通常用于完成线程之间的通信。

常用函数可以查看帮助文档,这里主要巨鹿使用管道完成线程通信的方法:

两个线程类中定义自己的管道对象,并且定义一个可以返回管道对象的方法,在run函数中完成通信内容,在外部使用时得到两个线程中的管道对象,连接(connect)即可,开始两个线程就会自动实现通信。

习题:两个线程实现发送一条信息

import java.io.*;
public class TestPipedInputStream {
	public static void main(String[] args)
	{
		Sender s = new Sender();
		Receiver r = new Receiver();
		PipedOutputStream out = s.output;//得到两个线程中的管道对象
		PipedInputStream in = r.input;
		try{in.connect(out);//连接
		}catch(Exception e)
		{
			e.printStackTrace();
		}
		s.start();
		r.start();
	}
}
class Sender extends Thread
{
	PipedOutputStream output = new PipedOutputStream();
	PipedOutputStream getInput()
	{
		return output;
	}
	public void run()
	{
		String s = new String("This is for test");
		try{
			output.write(s.getBytes());//向管道中写入信息
			output.close();
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}
class Receiver extends Thread
{
	PipedInputStream input = new PipedInputStream();
	PipedInputStream getInput()
	{
		return input;
	}
	public void run()
	{
		int len = 0;
		byte[] b = new byte[1024];
		try{
			len = input.read(b);//从管道中读出信息
			input.close();
		}catch(Exception e)
		{
			e.printStackTrace();
		}
		System.out.println(new String(b,0,len));//打印
	}
}


By teArrayInputStream类和ByteArrayOutputStream类

用于以IO流的方式完成字节数组的读写,通常用来实现类似内存虚拟文件和内存映像文件的功能。

程序在运行过程中产生的临时文件采用内存虚拟文件就可以不用访问硬盘会极大的提高效率。通常将两个类的实例对象作为参数传递给处理函数。

习题:将一串字符串转换为大写输出

import java.io.*;

public class TestByteArrayInputStream {
	public static void main(String[] args)
	{
		String s = new String("asdFRsdfTGgh");
		ByteArrayInputStream bInput = new ByteArrayInputStream(s.getBytes());//
		ByteArrayOutputStream bOutput = new ByteArrayOutputStream();//
		transform(bInput, bOutput);
		System.out.println(bOutput.toString());
	}
	//定义一个函数将小写字母改为大写字母
	public static void transform(InputStream input, OutputStream output)
	{
		int ch = 0;
		try{
			while((ch = input.read())!= -1)//读出单个字符转换成大写
			{
				int ch1 = Character.toUpperCase((char)ch);
				output.write(ch1);//写入输出流
			}
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

总结:PipedInputSream, ByteArrayInputStream,以及上一节的FileInputStream类都是InputSteam的子类,都拥有读的方法read,都是从输入流中读取字节;PipedOutputStream, ByteArrayOutputStream, FileOutputSteam都是Output的子类,都有写write的方法,都是向输出流中写入字节数组,在用的时候只要记住Input是读,output是写就分清了。

另外这三对流类都有针对字符的类分别是PipedWriter,PipedReader和StringWriter,StringReader和FileWriter,FileReader。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值