Java I/O流(字节和编码)

内容

输入输出是相对于内存来说的。

  • 输入:把数据从硬盘输入到内存中,所以是读取硬盘中的数据到内存
  • 输出:把数据从内存输出到硬盘中,所以是把内存中的数据写入硬盘

字节和编码

1 byte有8 bit,字节是数据的最小单位,因为数据在硬盘中以二进制表示,8 bit就是8位二进制数,8位每一位可以用1或0表示,根据排列组合,1和0可以有种组合,每一个组合可以换成对应的整数-127~127,即byte可以输入的整数的范围。再把输入byte的在范围内的整数再换成二进制存入硬盘。从硬盘读取二进制数,通过编码,表示成一个符号。看ACII码表,十进制97是a,对应的二进制的形状就是1100001对应成a。编码就是人为创建的对应关系,1100001对应成a。(粗鲁的理解字节和编码)

  • UTF-8三个字节一个中文
  • GBK两个个字节一个中文
  • 解码 (decode)把电脑能看懂的二进制变成人能看懂的符号。
  • 编码 (encode)把人能看懂的符号变成电脑能看懂的二进制。

Java用例

byte b = 97;  
/*97的二进制1100001
  通过write(b),写入硬盘,硬盘被打入印记1100001
  当读取硬盘的时候,为了让人明白1100001,通过编码对应关系,对应为a,此时打开记事本吧就能看到a
*/
复制代码

常用流

FileOutputStream(String(File),Boolean)
//(写入的目的地参数(即路径),是否续写文件) true续写不覆盖,false创建新文件,覆盖原有内容
FileIntputStream(String(File),Boolean)

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class IOTest {
    public static void main(String[] args) throws IOException {
        FileOutputStream file = new FileOutputStream("D:\\JavaSE\\基础语法\\src\\com\\javaSE\\CommonAPI\\a.txt",false);
        String s = "完全不够";
        byte[] b = s.getBytes();//把字符串变成字节数组,因为write()方法只能接收字节,
        System.out.println(Arrays.toString(b));
        file.write(98);
        file.write(b);
        file.close();//因为流占用的资源较多,所以要close,不关也行,jvm会自动关
    }
}
复制代码

换行

换行符号也是字符串,所以需要转换成字节

  • Win:\r\n
  • Linux:\n
  • Mac:\r
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class IOTest {
    public static void main(String[] args) throws IOException {
        FileOutputStream file = new FileOutputStream("D:\\JavaSE\\基础语法\\src\\com\\javaSE\\CommonAPI\\a.txt",true);
        String s = "完全不够";
        byte[] b = s.getBytes();//把字符串变成字节数组,因为write()方法只能接收字节,
        //System.out.println(Arrays.toString(b));//你会发现3个字节一个中文
        file.write(98);
        file.write(b);
        file.write("\r\n".getBytes());
        file.close();
    }
}
复制代码
分类:
代码人生
标签: