「管道流java」管道流量对照表
今天给各位分享管道流java的知识,其中也会对管道流量对照表进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java 管道流
管道流实际上就是整行的读取和写入,不用每个字节每个字节的读取和写入
读写是两个不同的分支,通常都是分开单独使用的。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注一: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:
OutputStreamWriter pw = null;//定义一个流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
pw.write("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次write
pw.close();//关闭流
备注二:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
java如何使用管道流传递客户对象 ?
管道流可以实现两个线程之间,二进制数据的传输。
管道流就像一条管道,一端输入数据,别一端则输出数据。通常要分别用两个不同的线程来控制它们。
使用方法如下:
[html] view plaincopy
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class PipedInputStreamTest {
public static void main(String[] args) {
//管道输出流
PipedOutputStream out = new PipedOutputStream();
//管道输入流
PipedInputStream in = null;
try {
//连接两个管道流。或者调用connect(Piped..);方法也可以
in = new PipedInputStream(out);
Thread read = new Thread(new Read(in));
Thread write = new Thread(new Write(out));
//启动线程
read.start();
write.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Write implements Runnable {
PipedOutputStream pos = null;
public Write(PipedOutputStream pos) {
this.pos = pos;
}
public void run() {
try {
System.out.println("程序将在3秒后写入数据,请稍等。。。");
Thread.sleep(3000);
pos.write("wangzhihong".getBytes());
pos.flush();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
if (pos != null) {
pos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class Read implements Runnable {
PipedInputStream pis = null;
public Read(PipedInputStream pis) {
this.pis = pis;
}
public void run() {
byte[] buf = new byte[1024];
try {
pis.read(buf);
System.out.println(new String(buf));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (pis != null) {
pis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
请问java管道流是用来干嘛的?通俗的说一下
IO流只有一种表现形态,即要么输出,要么输入。这样就有了InputStream和OutputStream。再说一点,流是可以相互包含的,即输入流可以接受输出对象,输出流可以接受输入对象(具体看API方法就可以了)。
接着看看管道流的构造器,可以创建默认构造器(未连接),也可以构造有输入或输出流的管道流。创建了以后,调用connect方法,可以将输入流与输出流进行连接
java关于管道流的问题
首先需要明确一点的是管道流本身就不建议在一个线程中使用,这是因为向输出流中写的数据,都会存到输入流内部的一个1024字节大小的数组中,如果写的内容超过这个数组的大小,而且没有被输入流读取的话,输出流所在的线程就会等待,这时,如果是在同一个线程中,该线程就会死锁,这是sun在管道流中明确指明的,不推荐在同一个线程中使用。
至于你说的多个线程通过管道向另外一个线程发送数据,出现部分数据丢失的情况,没有代码不好分析具体原因。
大概看了下你的代码,撇开其他的问题先不管,在你的代码中所有ThrFindIndex中的PipedOutputStream都是connect到同一个PipedInputStream,而每个ThrFindIndex的run方法在运行完以后就会把这个PipedOutputStream进行close(),假设一个情景:第一个ThrFindIndex线程一直在运行,当他运行完了之后,这个PipedOutputStream就会被关闭,所有的管道也就都没用了,这必然会影响到其他使用该管道的线程。so我没有往下在看了,大致原因应该在这里。
关于管道流java和管道流量对照表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。