Java笔记第五弹

字节流读数据(一次读一个字节数据)

步骤:1、创建字节流输入流对象

​ 2、调用字节输入流对象的读数据方法

​ 3、释放资源

相关应用:
FileInputStream fis=new FileInputStream("myByteStream\\fos.txt");//创建输入流对象
int by=fis.read();//一次只能读到一个字节数据
System.out.println(by);//输出int类型
System.out.println((char)by);//输出char类型
fis.close();

//数据读取到达文件末尾,输出-1
//连续读取数据
FileInputStream fis=new FileInputStream("");//创建输入流对象
int by=fis.read();//一次只能读到一个字节数据
System.out.println((char)by);
by=fis.read();
System.out.println((char)by);
fis.close();

//优化
FileInputStream fis=new FileInputStream("");//创建输入流对象
while((int by=fis.read())!=-1){
    System.out.println((char)by);
    by=fis.read();
}
fis.close();
案例:复制文本文件
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("E:\\itcast\\窗里窗外.txt");

        FileOutputStream fos=new FileOutputStream("myByteStream\\窗里窗外.txt");

        int by;
        while((by=fis.read())!=-1){
            fos.write(by);
        }
        
        fis.close();
        fos.close();
    }
}
字节流读数据(一次读一个字节数组数据)
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("myByteStream\\fos.txt");//创建输入流对象
        
        byte[] by=new byte[1024];//一般是1024及其整数倍
        int len;
        while((len=fis.read())!=-1){//循环
            System.out.println(new String(by,0,len));
        }
        
        fis.close();
    }
}
案例:复制图片
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("E:\\itcast\\mn.jpg");

        FileOutputStream fos=new FileOutputStream("myByteStream\\mn.jpg");

        byte[] by=new byte[1024];
        int len;
        while((len=fis.read(by))!=-1){
            fos.write(by,0,len);
        }

        fis.close();
        fos.close();
    }
}
字节缓冲流
//构造方法
//缓冲输出流
BufferedOutputStream(OutputStream out);
//缓冲输入流
BufferedInputStream(InputStream in);
//写数据
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        //FileOutputStream fos=new FileOutputStream("myByteStream\\fos.txt");
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("myByteStream\\fos.txt"));
        
        bos.write("hello/r/n".getBytes());
        bos.write("world/r/n".getBytes());
        
        bos.close();
    }
}

//读数据
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedInputStream bos=new BufferedInputStream(new FileInputStream("myByteStream\\fos.txt"));

        //一次读取一个字节数据
        int by;
        while((by=bos.read())!=-1){
            System.out.println((char)by);
        }
        
        //一次读取一个字节数组
        byte[] by1=new byte[1024];
        int len;
        while((len=bos.read(by1))!=-1){
            System.out.println(new String(by1,0,len));
        }

        bos.close();
    }
}
案例:复制视频
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        //记录开始时间
        long startTime=System.currentTimeMillis();
        
       //复制视频
        method1();
        //记录结束时间
        long endTime=System.currentTimeMillis();
        System.out.println("共耗时:"+(endTime-startTime)+"毫秒");
    }
    
    public static void method1() throws IOException {
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("myByteStream\\字节流复制图片.avl"));
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("E:\\itcast\\字节流复制图片.avl"));
        //字节数据
        int by;
        while((by=bis.read())!=-1){
            bos.write(by);
        }
        
        //字节数组数据
        byte[] by1=new byte[1024];
        int len;
        while((len=bis.read(by1))!=-1){
            bos.write(by1,0,len);
        }
        
        bos.close();
        bis.close();
    }
}

字符流

为什么出现字符流?

字符流=字节流+编码表

汉字在存储时,无论选择哪一种编码进行存储,第一个字节都是负数;

posted @ 2022-07-25 21:36  yesyes1  阅读(15)  评论(0编辑  收藏  举报