本节课我学习的主要内容有:
1.管道流
管道流:
用于连接输入流和输出流。
一般运用在两个不同线程之间传输数据。
这里的input是对应从管道中得到数据并输入到别的地方。
output对应的是从别的地方得到数据并输出数据到管道中。
PipedTest01类(测试管道类):
package LessonForIO03;
import java.io.*;
public class PipedTest01
{
//生产数据的方法,将数据写入管道。
public static void outputTo(PipedOutputStream pos)
{
try
{
for (int i=0; i<20; i++)
{
pos.write(i);
pos.flush();//每output一次,刷新缓冲区,目的是即刻写出。
System.out.println("写出数据 "+i+" 到管道中去。");
Thread.sleep(1000);// 每写入一次,该线程就停止一秒,避免写入过快,不明显。
}
pos.close();
} catch (IOException | InterruptedException e)
{
e.printStackTrace();
}
}
//取走数据的方法,将管道中的数据取出.
public static void inputTo(PipedInputStream pis)
{
try
{
int length;
while ((length = pis.read()) != -1)
{
System.out.println("从管道中读到的数据:"+length);
}
} catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
//通过构造函数来组装管道:
System.out.println("通过构造函数来组装管道:");
PipedInputStream pis1 = new PipedInputStream();
PipedOutputStream pos1 = null;
try
{
pos1 = new PipedOutputStream(pis1);//这样的话不能用lambda表达式来初始化new Thread
} catch (IOException e)
{
e.printStackTrace();
}
//通过connect方法来组装管道:
System.out.println("通过connect方法来组装管道:");
PipedInputStream pis2 = new PipedInputStream();
PipedOutputStream pos2 = new PipedOutputStream();
try
{
pos2.connect(pis2);//他俩倒过来连也行,建议使用。
} catch (IOException e)
{
e.printStackTrace();
}
new Thread(()->{outputTo(pos2);}).start();
new Thread(()->{inputTo(pis2);}).start();
}
}
本篇部分文字来源于:
咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
在这里十分感谢老师能够给我带来学习的激情。
2020.11.9
本文章是本人学习笔记,不进行任何商用所以不支持转载请理解!也请别拿去商用!
如果觉得对你有帮助那么欢迎你随时来回顾!
只为记录本人学习历程。
毕