java IO流,文件

1 编码

1.1 字符编码表(字符集)

  1. ASCII 码表:
    保存了数字,字母等
    A - 65,a - 97,0 - 48

  2. GB2312 码表:
    保存了常用的汉字(6-7千个),一个中文占两个字节,且都为负数

  3. GBK 码表:
    保存了基本所有的汉字(20000多个),不管中文还是英文都为2个字节,这两个字节可为正负

  4. Unicode 码表:
    统一码标(万国码标)
    不管是中文还是英文都是两个字节

  5. UTF-8 码表:
    一个字节就可以存储的数据不用两个字节存储
    这个码表更加标准化,在每一个字节头加入了编码信息

  6. ISO-8859-1 码表:
    拉丁码表
    Tomcat默认编码
    都是负数

在GBK中一个中文两个字节
在UTF-8中一个中文三个字节

2 编码转换流

2.1 OutputStreamWrite

可以写一个字符串,字符数组
是字符流向字节的桥梁

2.2 OutputStreamWrite

可以接收一个字符串,字符数组
是字节向字符流的桥梁

public class streamDemo {
    @Test
    public void outputStreamDemo() throws IOException {
        File file = new File("");
        String src = file.getAbsolutePath()+"/src/com/looc/demo10/1.txt";
        OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(src),"UTF-8");

        writer.write("啦啦啦啦");

        writer.close();
    }

    @Test
    public void inputStreamReader() throws IOException{
        File file = new File("");
        String src = file.getAbsolutePath()+"/src/com/looc/demo10/1.txt";

        InputStreamReader reader = new InputStreamReader(new FileInputStream(src),"utf-8");
        char[] chars = new char[4];
        int len = 0;
        String str;
        while ((len = reader.read(chars))!=-1){
            str = new String(chars,0,len);
            System.out.print(str);
        }

        reader.close();
    }
}

InputStreamReader 是 fileReader 的父类
fileReader 封装的时候就设置默认编码为GBK了

OutputStreamWrite 是 fileWrite 的父类
fileWrite 封装的时候就设置了默认编码为UTF-8

3. 序列化流与反序列化流

3.1 序列化流

写对象到文件
ObjectOutputStream

  1. 构造:
    ObjectOutPutStream(FileOutputStream out);
  2. 方法:
    writeObject(Object obj);//obj这个对象需要实现Serializable接口

    Serializable 启标记作用

3.2 反序列化流

从文件中读取对象
ObjectInputStream

  1. 构造:
    ObjectInPutStream(FileInputStream out);
  2. 方法:
    Object readeObject();

//之前写完对象之后,如果修改所属对象,原来的类即失效,这个时候就会出现无效类异常

JVM判断一个类是否有效,通过一个类的版本号判断
当写完一个类的时候,内部有一个版本号,当你修改这个类的时候,版本号就会随之发生变化
private static final long serialVersionUID

transient 关键字

用来修饰成员变量,使不使用transient修饰对成员变量完全没有影响
但是序列化的时候有用,如果一个成员被transient修饰,那么序列化的时候就会忽略改成员变量

4 打印流

打印字符流 打印字符流
两个打印东西方法一样
使用几乎一样,底层不同

4.1 PrintWriter 打印字符流

可以打印到:

  1. 字符串的文件名
  2. FIle对象
  3. 其他的OutputStream流
  4. 其他的Writer流

4.2 PrintStream 打印字符流

可以打印到

  1. 字符串的文件名
  2. FIle对象
  3. 其他的OutputStream流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值