JavaSe基础(27)-- 字节流

字节流

  • 字节流不仅可以操作文字,同样也可以操作图片等

OutputStream

  • 是所有输出字节流的父类,是一个抽象类
  • 通常使用的子类为:FileOutputStream
  • 常用方法

    写出方法:write()

    该方法是这个类的核心方法。有3种重载的形式

    public void write(int b) throws IOException
    一次只写入一个字节
    
    public void write(byte b[], int off, int len) throws IOException
    这个方法则写入b字节数组中数据到输出流,从第offset位开始写入len字节。
    
    public void write(byte b[]) throws IOException
    这个方法其实是上一个方法的特殊情况,当off=0, len=data.length的时候,
    就得到了这个方法
    

    关闭流方法:close()

    用于关闭输出流,释放相关的系统资源。关闭之后,该输出流不能再被操作或者重新打开,否则抛出异常。当然,你可以不关闭,但是这不是一个好习惯,时常会出现严重问题。

FileOutputStream

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

        //1,创建字节输出流对象。用于操作文件.
        FileOutputStream fos = new FileOutputStream("bytedemo.txt");

        //2,写数据。直接写入到了目的地中。 
        fos.write("abcdefg".getBytes());

        //3,关闭资源
        fos.close();
    }

InputStream

  • 是所有输入字节流的父类,是一个抽象类
  • 通常使用的子类为:FileInputStream
  • 常用方法

    读入方法:read()

    该方法是这个类的核心方法。有3种重载的形式

    public abstract int read()   throws IOException  
    该方法读取下一个字节,一次只读取一个字节
    返回一个0-255之间的int类型整数。如果到达流的末端,返回-1. 
    
    public int read(byte b[]) throws IOException  
    试图读入多个字节,存入字节数组b,返回实际读入的字节数。
    如果到达流尾部,没有字节可读,返回-1;
    
    public int read(byte[] b,int off,int len) throws IOException  
    这个方法跟上一个功能类似,除了读入的数据存储到b数组是从off开始。
    len是试图读入的字节数,返回的是实际读入的字节数。
    如果到达流尾部,没有字节可读,返回-1;
    

    关闭流方法:close()

    关闭当前流,释放与该流相关的资源,防止资源泄露。在带资源的try语句中将被自动调用。关闭流之后还试图读取字节,会出现IOException异常。

    public void close()     throws IOException  
    

FileInputStream

    public static void main(String[] args) throws IOException {
        //1,创建一个读取流对象。和指定文件关联。  里面含有ab两个字符
        FileInputStream fis = new FileInputStream("bytedemo.txt");

        //一次读取一个字节。
    /*  int ch = fis.read();        
        System.out.println(ch);
        ch = fis.read();        
        System.out.println(ch);
        ch = fis.read();        
        System.out.println(ch);*/

        //使用循环读取
    /*  int ch = 0;
        while((ch=fis.read())!=-1){
            System.out.println((char)ch);
        }*/


        //建议使用这种读取数据的方式
    /*  byte[] buf = new byte[1024]; //定义缓冲区 用于提高效率     
        int len = 0;//用于接收数据的长度

        while((len=fis.read(buf))!=-1){
            System.out.println(new String(buf,0,len));
        }*/

        //关闭流
        fis.close();
    }

练习 复制MP3

现将文件内容读取到程序中 然后在将数据从程序中写入到硬盘

  public static void copy_1() throws IOException {

        FileInputStream fis = new FileInputStream("c:\\0.mp3");     
        FileOutputStream fos = new FileOutputStream("c:\\1.mp3");

        byte[] buf = new byte[1024];

        int len = 0;

        while((len=fis.read(buf))!=-1){ //注意 危险动作
            fos.write(buf,0,len);
        }

        fos.close();
        fis.close();
    }

你可能感兴趣的:(JavaSe基础(27)-- 字节流)