黑马程序员_java07_IO

来源:互联网 发布:乡镇网络舆情监控制度 编辑:程序博客网 时间:2024/06/09 23:22

——- 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
原创粉丝点击