java字节流和字符流

在Java中,通过不同的输入输出设备之间的数据传输抽象表述为"流",程序允许通过流的方式与输入输出设备进行数据传输。在Java中的"流"都在java.io包中,称为IO流。

IO流 

按照操作数据的不同,可以分为字节流和字符流
​按照数据传输方向的不同可分为输入流和输出流

字节流:在计算机中,无论是文本、图片、视频、音频都是以二进制(字节)形式存在,IO流中针对字节的输入输出提供了
一系列的流,统称为字节流,根据数据的传输方向,可分为字节输入流和字节输出流
JDK提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级父类,所有的字节输入流都继承自InputStream
所有的字节输出流都继承自OutputStream

InputStream字节输入流

案例:

import java.io.FileInputStream;
import java.io.InputStream;

public class Demo1 {
    public static void main(String[] args) throws Exception {
        // 创建一个文件字节输入流
        InputStream fileInputStream = new FileInputStream("D:/test.txt");
        int b = 0;
        while(true){
            b = fileInputStream.read();
            if(b == -1){
                break;
            }
            System.out.println(b);
        }
        // IO流用完了一定要关闭不然会一直开着造成资源浪费
        fileInputStream.close();
    }
}

```

OutputSream字节输出流

案例:
package com.sj.cn3;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class Demo2 {
    public static void main(String[] args) throws Exception {
        // 文件字节输出流
        // FileOutputStream会在项目根目录下新建一个test1.txt
        OutputStream outputStream = new FileOutputStream("D:/test1.txt");
        String str = "张三";
        byte[] bytes = str.getBytes();
        for(int i = 0 ; i < bytes.length ; i ++){
            outputStream.write(bytes[i]);
        }
        outputStream.close();
    }
}

在上面代码中,修改代码可以往文件里面追加内容

import java.io.FileOutputStream;
import java.io.OutputStream;

public class Demo3 {
    public static void main(String[] args) throws Exception {
        // 文件字节输出流
        // FileOutputStream会在项目根目录下新建一个test1.txt true参数表示可追加
        OutputStream outputStream = new FileOutputStream("D:/test1.txt",true);
        String str = "软件开发工程师";
        byte[] bytes = str.getBytes();
        for(int i = 0 ; i < bytes.length ; i ++){
            outputStream.write(bytes[i]);
        }
        outputStream.close();
    }
}

字节流的缓冲区:

案例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo5 {
    public static void main(String[] args) throws Exception {
        // 创建字节文件输入流河输出流
        InputStream is = new FileInputStream("D:/test.txt");
        OutputStream os = new FileOutputStream("D:/tar/test.txt");
        // 缓冲区
        byte[] buff = new byte[1024];
        // 定义一个变量len,用于记录每次读取的一个字节
        int len;
        long beginTime = System.currentTimeMillis();
        // 通过while循环每次读取相关字节写入
        while((len = is.read(buff))!=-1){
            // 读取buff缓存区中的数据从0开始到len结束
            os.write(buff,0,len);
        }
        long endTime = System.currentTimeMillis();
        System.out.println("拷贝文件所用时间为:"+(endTime-beginTime)+"毫秒");
        is.close();
        os.close();
    }
}

字符流:
字符流顶级父类,Reader和Writer Reader是字符输入流从某个源设备读取字符 Writer是字符输出流向某个目标写入字符
字符流获取文件中的数据:

案例:

import java.io.FileReader;

public class Demo1 {
    public static void main(String[] args) throws Exception {
        FileReader fileReader = new FileReader("D:/read.txt");
        int len;
        while((len=fileReader.read())!= -1){
            System.out.print((char) len);
        }
        fileReader.close();
    }
}

字符流缓冲对象

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;

public class Demo2 {
    public static void main(String[] args) throws Exception{
        FileReader reader = new FileReader("D:/read.txt");
        BufferedReader br = new BufferedReader(reader);
        FileWriter fileWriter = new FileWriter("D:/read2.txt");
        BufferedWriter bw = new BufferedWriter(fileWriter);
        String str;
        while((str=br.readLine())!=null){
            bw.write(str+"\n");
            bw.newLine();
        }
        br.close();
        bw.close();
    }
}

转换流

字节流和字符流之间转换

案例:

import java.io.*;

public class Demo3 {
    public static void main(String[] args) throws Exception{
        // 创建字节输入流
        FileInputStream fileInputStream = new FileInputStream("D:/read.txt");
        // 将字节输入流转换成字符输入流
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
        // 创建字符流对象缓冲区
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        
        FileOutputStream fileOutputStream = new FileOutputStream("D:/read2.txt");
        // 将字节输出流转换成字符输出流
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
        // 创建字符流对象缓冲区
        BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
        
        String str;
        while((str=bufferedReader.readLine())!=null){
            bufferedWriter.write(str);
        }
        bufferedWriter.close();
        bufferedReader.close();
    }
}

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值