IO输入输出流

本文详细介绍了Java中的IO流概念及其实现方式,包括字节流和字符流两大类。通过具体的例子展示了如何使用不同的输入输出流进行数据传输,如从控制台输入数据到文本文件以及复制图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO输入输出流

把通过不同输入输出设备(键盘,显示器,网络,内存等)之间的数据传输抽象表述为“流”。

字节流

字节输入流(InputStream)

InputStream(抽象类)
|–FileInputStream:文件字节输入流,向文件进行数据传递。
|–FilterInputStream :封装其它的字节输入流,并为它们提供额外的功能。
  |–BufferedInputStream:缓冲字节输入流,缓冲功能。
  |–DataInputStream:数据字节输入流,允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。
|–ByteArrayInputStream:字节数组输入流,包含一个内部缓冲区。
|–ObjectInputStream:对象字节输入流,用于恢复那些以前序列化的对象,对象必须实现Serializable接口。
|–SequenceInputStream:合并字节输入流,表示其他输入流的逻辑串联。
|–PipedInputStream:管道字节输入流,用于线程间数据传输。

字节输出流(OutputStream)

OutputStream(抽象类)
|–FileOutputStream:文件字节输出流。
|–FilterOutputStream:封装其他的字节输出流。
  |–BufferedOutputStream:缓冲字节输出流。
  |–DataOutputStream:基础数据字节输出流。
|–ByteArrayOutputStream:字节数组输出流。
|–ObjectOutputStream:对象字节输出流,专递序列化对象。
|–PipedOutputStream:管道字节输出流,可以将管道输出流连接到管道输入流来创建通信管道。
|–PrintStream:字节打印流,输出打印。

字符流

字节流+编码表

字符输入流

Reader(抽象类)
|–BufferedReader:缓冲字符输入流,具有缓冲作用。
  |–LineNumberReader:跟踪行号的缓冲字符输入流。
|–CharArrayReader:字符数组输入流,此类实现一个可用作字符输入流的字符缓冲区。
|–StringReader:字符串输入流,其源为一个字符串的字符流。
|–InputStreamReaer:(输入)字节流通向字符流的桥梁。
  |–FileReader,文件字符输入流,读取字符文件。

字符输出流

Writer(抽象类)
|–BufferedWriter:缓冲字符输出流。
|–CharArrayWriter:字符数组输出流。
|–StringWriter:字符串输出流。
|–OutputStreamWriter:(输出)字节流通向字符流的桥梁。
  |–FileWriter:文件字符输出流。
|–PrintWriter:字符打印流,打印字符流数据。

实验

控制台输入数据到Txt文件

    public void writeToTXT() throws IOException{
        File file= new File("E://Test.txt");        //创建一个File对象
        if(!file.exists()){                         //判断File对象对应的文件或目录是否存在
            file.createNewFile();                   //创建File对象所指定的新文件,若已经存在不创建,返回false
        }
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));   //获取键盘输入
        FileWriter fw = new FileWriter(file);                                       //利用往文件传递数据的字符输出流输出
        String str;
        while((str=bf.readLine())!=null){
            if("over".equals(str)){                                                 //若回车输入“over”则结束程序
                break;
            }
            fw.write(str);                                                          
            fw.write("\r\n");                                                       //换行语句  
            fw.flush();                                                             //刷新缓冲的输出流          
        }
        fw.close();
        bf.close();
    }


复制图片


    public void copyPic() throws IOException{
        BufferedInputStream bi = new BufferedInputStream(new FileInputStream("E://Test.jpg"));
        BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream("S://Test.jpg"));
        byte[] buff = new byte[1024];                            //字节数组缓冲区
        int len;
        long beginTime = System.currentTimeMillis();             //开始时间
        while((len=bi.read(buff))!=-1){                          //判断是否读到文件末尾
            bo.write(buff, 0, len);                              //从第一个字节开始,写入len字节
        }
        long endTime = System.currentTimeMillis();               //结束时间
        System.out.println("复制消耗时间:"+(endTime-beginTime)+"毫秒");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值