java-BIO 总结

io
java io 包中包含了各种 InputStream  OutputStream   Reader Writer 子类,用途汇总如下:

文件
网络
内存缓存
线程内部通信(管道)
缓冲
过滤
解析
读写文本(Read、Writer)
读写基本类型
读写对象

 字节流字符流
 字节输入字节输出字符输入字符输出
基类InputStreamOutputStream

Reader

InputStreamReader

Writer 

OutputStreamWriter

数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
文件FileInputStream RandomAccessFile

FileOutputStream

RandomAccessFile

FileReaderFileWriter
管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter
缓存BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
过滤FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
解析

PushbackInputStream

StreamTokenizer

 

PushbackReader

LineNumberReader

 
字符串  StringReaderStringWriter
数据DataInputStreamDataOutputStream  
数据格式 PrintStream PrintWriter
对象ObjectInputStremObjectOutputStream  
工具类SequenceInputStream   

文件:
    读:
    FileInputStream读取二进制文件,允许一个一个字节读取文件,也可以定义一个字节数组,一次读取这个数组长度的字节。是按照顺序读文件。
    FileReader 读取文本文件,允许一个一个字符读取文件,也可以定义一个字符数组,一次读取这个数组长度字符。是按照顺序读文件。
    RandomAccessFile   允许跳跃式读取文件其中的某些部分。可读可写字符字节和数组。可以看看api
    
    写:
    FileOutputStream, FileWriter, RandomAccessFile  是和读文件一样的。
    
管道:
    适用于同一个jvm中不同的线程同步数据。通过PipedOutputStream和PipedInputStream创建管道,这两个管道要成对出现相互关联,一个线程通过PipedOutputStream 写入的数据,可以被另一个线程通过PipedInputSteam 读取出来。
    示例代码:
    

public static void main(String[] args) throws Exception{

        PipedInputStream inputStream = new PipedInputStream();
        //创建输出,使用其关联
        PipedOutputStream outputStream  = new PipedOutputStream(inputStream);

        //也可以调用connect 方法关联
//        inputStream.connect(outputStream);

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                    try {
                        outputStream.write(("pipedTest").getBytes());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }finally {
                        try {
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
            }
        });


        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    int read = inputStream.read();
                    while (read!=-1){
                        System.out.println((char) read);
                        read = inputStream.read();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        thread.join();
        thread1.join();

        thread.start();
        thread1.start();

    }


    说明:
        1、PipedInputstream 和 PipedOutputStream 一定要分配到两个不同的线程,read() 和 write() 方法会导致流阻塞,在同一个线程可能会导致死锁。
        2、如果需要在线程之前传递字节数据使用管道,不过一般在线程间传递的数据可能是一个对象。

数组:
ByteArrayInputStream    ByteArrayOutputStream    CharArrayReader    CharArrayWriter  把数组数据转成对应的流

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值