黑马程序员_java07_IO

——- android培训java培训、期待与您交流! ———-

java中提供了全面的输入输出流(IO)接口,包括标准的输入输出流,文件读写流,对象的串行化传输等,java中I/O是以流为基础进行的输入输出的,所有的数据进行串行化写入输出流,或者输入流流入。

流的概念
流是程序与外界进行数据交换的通道,在这个通道上传输的是有序的字节或者字符序列。流也是输入和输出设备的一种抽象表示,这些设备是数据源或者是数据终点,通过流,可以想数据终点所代表的设备写入数据,也可以从数据源中读取数据中读取数据。基于流的处理,简化了开发人员对于输入和输出处理的难度。当流作为数据写入的目的地时,该流被称为输出流。输出流可以连接硬盘上的文件,网络上的另一端等任何可以接收字节序列的设备。从提供数据的流称为输入流。输入流输出流称为“结点流”,结点流连接的就是文件,内存线程以及间的管道等,代表数据的来源和目的地。

字节流和字符流

字节流的两个基类 :InputStream OutputStream
字符流的两个基类:Reader Writer

为了提高输入输出流的效率引入缓冲流
BufferedInputStream BufferedOutStream BufferedReader BufferedWriter

输入流实例
import java.io.*;
class BufferedReaderDemo 
{
    public static void main(String[] args) throws IOException
    {
        FileReader fr=new FileReader("buf.txt");
        BufferedReader br=new BufferedReader(fr);
        String line=null;
        while ((line=br.readLine())!=null)
        {
            System.out.println(line);
        }
        br.close();
    }
}

输出流实例

import java.io.*;
class BufferedWriterDemo 
{
    public static void main(String[] args) throws IOException
    {
        FileWriter fw=new FileWriter("buf.txt");
        BufferedWriter bf=new BufferedWriter(fw);
        for (int x=0;x<4 ;x++ )
        {
            bf.write("abc"+x);          
            bf.newLine();
            bf.flush();
        }
        bf.close();
    }
}

在一个程序中到底使用哪种流都需要进行一下判断,具体思路如下:

1.明确源和目的
源: 输入流。InputStream Reader
目的:输出流。OutputStream Writer
2.操作的数据是否是纯文本
是: 字符流
不是: 字节流
3.当体系明确后,在明确要使用哪个具体的对象
通过设备来进行区分:
源设备: 内存,硬盘,键盘
目的设备:内存,硬盘,控制台

讲一个文本文件中数据存储到另一个文件中,复制文件。
源: 因为是源,所以使用读取流。InputStream Reader
是不是操作文本文件。是,这时就可以选择Reader 。这个体系明确了。
是否需要提高效率,是,加入Reader体系中的缓冲区BufferedReade

现在一具体的复制MP3为例
(1)因为图片是二进制文件,所以要使用字节流InputStream与OutputStream

(2)因为MP3文件大于1M,需要提高效率,使用缓冲区BufferedInputStream与BufferedOutputStream

(3)不需要字节流与字符流之间的转化,不需要转换流

import java.io.*;
class CopyMp3 
{
    public static void main(String[] args)throws IOException
    {
        long start =System.currentTimeMillis();
        copy2();
        long end =System.currentTimeMillis();
        System.out.println((end-start)+"ms");
    }
    public static void copy2()throws IOException
    {
        MyBufferedInputStream bufis=new MyBufferedInputStream(new FileInputStream("二次曝光.bov"));
        BufferedOutputStream bofos=new BufferedOutputStream(new FileOutputStream("2.bov"));
        int by=0;
        while ((bufis.myRead())!=-1)
        {
            bofos.write(by);
        }
        bofos.close();
        bufis.myClose();
    }
    public static void copy_1()throws IOException
    {
        BufferedInputStream bufis=new BufferedInputStream(new FileInputStream("二次曝光.bov"));
        BufferedOutputStream bofos=new BufferedOutputStream(new FileOutputStream("1.bov"));
        int by=0;
        while ((bufis.read())!=-1)
        {
            bofos.write(by);
        }
        bofos.close();
        bufis.close();
    }

}

转换流
InputStreamReader Out

该类为转换流,把一个字节输入流转换成一个字符输入流,使用该类转换时可以使用字符集解码器,默认为用户电脑系统使用的字节编码。

BufferedReader bufr

= new BufferedReader(newInputStreamReader(System.in));

上述代码描述了一个标准输入流(字节输入流)转换成字符缓冲区的输入流对象的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值