欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java基础(十七)——字节流与字符流

程序员文章站 2022-07-13 14:56:31
...

Java基础(十七)——字节流与字符流

字节流与字符流的相互转换:
字节流:Stream结尾的
字符流:Reader和Writer结尾的
输出字节流中在写入数据后不用刷新

练习:读文件输出到命令行
Java基础(十七)——字节流与字符流
数据源:读文件(字符流)
输出:标准输出流(字节流)————》字符流

方法一:字符流读,字节流写

import java.io.*;

public class 字符读字节输出 {
    public static void main(String[] args) throws IOException {
        //高效流也称包装流,本身并不具备读写功能,所以我们要传入一个具备读写的输入流
        //创建输入流对象
        BufferedReader br = new BufferedReader(new FileReader("Test.java"));
        //创建输出流对象
        OutputStream os = System.out;  //字节流
        String line;
        while((line = br.readLine()) != null){
            os.write(line.getBytes());
            os.write("\r\n".getBytes());

        }
        os.close();
        br.close();
    }
}

由于标准输入流是一个字节输入流,所以只能输出字节或者字节数组,但是我们读取到的数据则是字符串,如果想进行输出还需要转换成字节数组
我们要想通过标注输出流输出字符串,把标准输出流转换成一种字符输出流即可。
字节输出流————》字符输出流
OutputStreamWriter(OutputStream out)

字符流读,字节流转换为字符流输出

import java.io.*;

public class 字符读字节输出 {
    public static void main(String[] args) throws IOException {
        //高效流也称包装流,本身并不具备读写功能,所以我们要传入一个具备读写的输入流
        //创建输入流对象
        BufferedReader br = new BufferedReader(new FileReader("Test.java"));
        //创建输出流对象
        //OutputStream os = System.out;  //字节流,标准输出流
        //字节流转化成字符流
        Writer w = new OutputStreamWriter(System.out);//多态,父类型指向子类对象

        String line;
        while((line = br.readLine()) != null){
            w.write(line);
            w.write("\r\n");

        }
        w.close();
        br.close();
    }
}

输出流也用高效输出流,用包装流

import java.io.*;

public class 字符读字节输出 {
    public static void main(String[] args) throws IOException {
        //高效流也称包装流,本身并不具备读写功能,所以我们要传入一个具备读写的输入流
        //创建输入流对象
        BufferedReader br = new BufferedReader(new FileReader("Test.java"));
        //创建输出流对象
        //OutputStream os = System.out;  //字节流,标准输出流
        //字节流转化成字符流
        Writer w = new OutputStreamWriter(System.out);//多态,父类型指向子类对象
        BufferedWriter bw = new BufferedWriter(w);

        String line;
        while((line = br.readLine()) != null){
            bw.write(line);
            bw.newLine();

        }
        bw.close();
        br.close();
    }
}

最后版本:

import java.io.*;

public class 字符读字节输出 {
    public static void main(String[] args) throws IOException {
        //高效流也称包装流,本身并不具备读写功能,所以我们要传入一个具备读写的输入流
        //创建输入流对象
        BufferedReader br = new BufferedReader(new FileReader("Test.java"));
        //创建输出流对象
        //OutputStream os = System.out;  //字节流,标准输出流
        //字节流转化成字符流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        //OutputStreamWriter将字节流转化成字符流。System.out是标准输出流(字节流)

        String line;
        while((line = br.readLine()) != null){
            bw.write(line);
            bw.newLine();

        }
        bw.close();
        br.close();
    }
}

练习:读命令行写入到文件中
标准输入(字节流),字符流写入
数据源:读取键盘录入的数据 标准输入流(字节流) System.in
目的地:项目根目录下 FileWriter(字符流)

import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;

public class 字节读字符写入 {
    public static void main(String[] args) throws IOException {
        //创建输入流对象
        InputStream is = System.in;
        //创建输出流对象
        FileWriter fw = new FileWriter("a.txt");

        //读写数据
        byte[] bys = new byte[1024];
        int len;
        while((len = is.read(bys)) != -1){
            fw.write(new String(bys,0,len));
            fw.flush();
        }

        fw.close();
        is.close();
    }
}

转换流:需要把字节输入流转换成字符输入流:InputStreamReader(InputStream)

import java.io.*;

public class 字节读字符写入 {
    public static void main(String[] args) throws IOException {
        //创建输入流对象
        InputStream is = System.in;
        Reader fr =  new InputStreamReader(is); //多态,用FileReader不行,不是子父类关系
        //创建输出流对象
        FileWriter fw = new FileWriter("a.txt");

        //读写数据
        char[] chs = new char[1024];
        int len;
        while((len = fr.read(chs)) != -1){
            fw.write(new String(chs,0,len));
            fw.flush();
        }

        fw.close();
        is.close();
    }
}

打印流:只能输出不能输入
Java基础(十七)——字节流与字符流
PrintStream:System.out.print()和System.out.println();

Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
省了:两个步骤:自动刷新和自动换行

Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
写:
Java基础(十七)——字节流与字符流
读:
Java基础(十七)——字节流与字符流

解决对象输入流读取对象出现的异常的问题
Java基础(十七)——字节流与字符流

Java基础(十七)——字节流与字符流
解决对实现序列化接口出现的警告问题
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流
Java基础(十七)——字节流与字符流

相关标签: