java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字节流

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

练习:读文件输出到命令行

java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_流_02


数据源:读文件(字符流)

输出:标准输出流(字节流)————》字符流

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

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两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_03


PrintStream:System.out.print()和System.out.println();

java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_04


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字符流_05


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字节流_06


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_07


省了:两个步骤:自动刷新和自动换行

java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字符流_08


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_09


写:

java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字符流_10


读:

java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字节流_11

解决对象输入流读取对象出现的异常的问题

java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字节流_12

java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_13


解决对实现序列化接口出现的警告问题

java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_14


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_15


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字符流_16


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字节流_17


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_18


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_19


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字符流_20


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_21


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字符流_22


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字符流_23


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_字节流_24


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_25


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_流_26


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_流_27


java两个系统怎么通过字节流数组传输文件 java字节流和字符流转换_输入流_28