「管道流java」管道流量对照表

博主:adminadmin 2022-12-01 04:48:05 70

今天给各位分享管道流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和管道流量对照表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-01,除非注明,否则均为首码项目网原创文章,转载请注明出处。