美文网首页
多线程管道读写

多线程管道读写

作者: 招风小妖怪 | 来源:发表于2019-07-12 10:47 被阅读0次
import java.io.*;

//源文件-->路径---》FileInputStream-->PipOutputStream---->PipInputStream--->FileOutPutStream--->路径---》目标文件
//1   目标文件的数据把数据读出来,到读的字节流,写到管道中
class ReadThread extends Thread
{
    String sourcePath;
    PipedOutputStream pos;
    
    ReadThread(String path,PipedOutputStream pos)
    {
        this.sourcePath=path;
        this.pos=pos;
    }
    
    public void run()
    {
        try
        {
            FileInputStream fis = new FileInputStream(sourcePath);
            int data;
            while((data=fis.read())!=-1)
            {
                pos.write(data);
                sleep(10);
                System.out.print((char)data);
            }
            fis.close();
            pos.close();
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}



//2   把读管道的数据,交给写的字节流,写到文件中

class WriteThread extends Thread
{
    String destPath;
    PipedInputStream pis;
    
    WriteThread(String path,PipedInputStream pis)
    {
        this.destPath=path;
        this.pis=pis;
    }
    
    public void run()
    {
        try
        {
            FileOutputStream fos = new FileOutputStream(destPath);
            int data;
            while((data=pis.read())!=-1)
            {
                fos.write(data);
            }
            fos.close();
            pis.close();
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}



//3    主类,生成读写文件,2个管道,两个管道保证连接

class Demo05
{
    public static void main(String s[])throws Exception
    {
        String              sourcePath  = "Demo05.java";
        String              destPath    = "Demo05.txt";
        PipedInputStream    pis         = new PipedInputStream();
        PipedOutputStream   pos         = new PipedOutputStream();
        pis.connect(pos);
        
        ReadThread          readThread  = new ReadThread(sourcePath,pos);
        WriteThread         writeThread = new WriteThread(destPath,pis);
        readThread.start();
        writeThread.start();
              
    }
}

相关文章

  • 多线程管道读写

  • 管道基础

    ##管道基础 #通信分类:只写单工管道、只读单工管道、半双工管道(单向读写)、全双工管道(两个半双工管道拼接) 类...

  • iOS多线程读写崩溃分析

    最近再次遇到多线程读写导致的crash 问题,写了一个测试demo,记录分析过程。 上面是暴力重现多线程读写的崩溃...

  • System V IPC:共享内存

    共享内存原理 特点 相比管道通信,在读写数据的时候不用切内核态,使通信效率提升 相比命名管道,命名管道是内核管理的...

  • Unix进程间通信详解

    主要讲解进程间通信方式,包含管道 FIFO命名管道 消息队列 同步(互斥锁、条件变量、信号量、读写锁、fcntl记...

  • Redis各版本特性

    Redis6.0 多线程IO Redis 6引入多线程IO,但多线程部分只是用来处理网络数据的读写和协议解析,执行...

  • 基础篇:深入JMM内存模型volatile、synchroniz

    先介绍下多进程多线程在linux几种通信方式 管道:管道的实质是一个内核缓冲区,需要通信的两个进程各在管道的两端,...

  • Linux 管道需要关闭写端

    关于pipe管道的读写端关闭问题 [https://www.cnblogs.com/whiteHome/p/486...

  • go sync包的读写锁RWMutex的使用

    sync包的读写锁RWMutex的使用(sync.RWMutex) 我们使用“读写”锁的场景主要是在多线程的安全操...

  • Android 通过FileChannel拷贝文件

    FileChannel优势【待继续探究】:1.多线程并发读写,并发性;2.IO读写性能提高(OS负责),也可引做共...

网友评论

      本文标题:多线程管道读写

      本文链接:https://www.haomeiwen.com/subject/xxfekctx.html