IO-字节输出流-FileOutputStream


字节流

    基本操作与字符流相同

    但是它不仅可以操作字符,还可以操作其他的媒体文件

    例程一个Jpg文件

     

 

java.io

OutputStream

    public abstract class OutputStream

        此抽象类是表示输出字节流的所有类的超类。

 

java.io

FileOutputStream

    public class FileOutputStream  extends OutputStream

        字节流使用的是字节数组缓存区

        FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter

    

package day20.io.p1.ByteStream;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class ByteStreamDeam {
     
    private static FileOutputStream fos;
    private static FileInputStream fis;
   
    public static void main(String[] args) throws IOException {
     
        //writeFile();
        readFile();
        readFile2();
    }
     
    public static void readFile2() throws IOException {
        fis = new FileInputStream("temp\\fos.txt");
        //创建一个缓冲区,缓冲读到的字节,字节流使用的肯定是字节数组
        /*System.out.println(fis.available());//获取文件的字节数,可以创建一个大小刚好的缓冲区
        //文件过大的时候,用fis.available() 作为缓冲区的长度是不准确的,内存容易溢出,危险
        byte[] buf2 = new byte[fis.available()];
        fis.read(buf2);
        System.out.println(new String(buf2));
        */
        //以1024倍数的方法建立数组大小比较安全
        byte[] buf = new byte[1024];
        int len = 0;
        while((len = fis.read(buf))!=-1){
        System.out.println(new String(buf,0,len));
        }
        fis.close();
    }
    public static void readFile() throws IOException {
         /*
          * 读取一个文件,必然要用输入流
          * 找一个能操作文件的字节输入流
          */
        fis = new FileInputStream("temp\\fos.txt");
        int by = 0;
        
        while((by = fis.read())!=-1){
    System.out.println((char)by);
    }
   }

 

public static void writeFile() throws IOException {
    /*
     * 将内存中的数据写到硬盘上
     * 1.输出
     * 2.文件
     * 3.因为要演示字节流,所以要找一个能处理文件的字节输出流
     */
    fos = new FileOutputStream("temp\\fos.txt");
    //使用流对象的write方法,将数据写到目的地
    byte[] buf = "abc".getBytes();
    fos.write(buf);//没有刷新和关闭,数据直接写到了目的地
    //字符流底层用的是字节流,字符流中有缓冲区,
    //字符流要操作文本型的字节数据的时候,多了个动作---查表,
    //要查表,必须先把多个字节缓冲起来,查个表,才能出现相应的字符
    //字节流原封不动的将原始字节写到目的地,它需要缓冲吗?它不需要。
    //字节流要关闭吗?要关闭,因为关闭的主要目的是释放资源,字符流中的关闭有刷新和释放资源的双重作用。
    fos.close();
    }
     
}