JavaSE进阶-day10
1.编码表
1.1 码表概述
码表概述: 编码表就是"字母和数字之间的对应关系所形成的表格",里边记录着"字母所对应的数字" 常见码表: ASCII: 基础码表,只包含英文大小写字母,数字和英文标点符号 GBK: 中国的编码表.一个汉字占2个字节.windows中文简体操作系统默认编码 UTF-8: 万国码,支持全世界大部分文字.一个汉字占3个字节. ISO-8859-1: 欧洲常用编码表.
1.2 手动编解码
//编码: 把字符串按照指定编码,转换为"byte数组" byte[] bys = 字符串.getBytes(); //根据默认编码表转换(Idea默认是UTF-8) byte[] bys = 字符串.getBytes("编码表名称"); //根据指定编码表转换 //解码: 把"byte数组"按照指定编码,转换为字符串 String s = new String(byte数组); //根据默认编码表转换(Idea默认是UTF-8) String s = new String(byte数组,"编码表名称");//根据指定编码表转换
1.3 IO补充
1.文件复制时,使用字节流. 2.单独读取文本文件,或单独写出文本文件,使用字符流
2.字符流(了解)
2.1 字符输出流
构造: public FileWriter("文件路径"); //指定文件输出位置(如果文件不存在则创建,如果文件存在则覆盖) public FileWriter("文件路径",是否追加); //指定文件输出位置(如果第二个参数是true,则表示不覆盖,而是追加续写) 方法: public void write(int b); //写出一个字符 public void write(char[] chs); //把字符数组中的所有数据都写出. public void write(char[] chs,int off,int len); //把字符数组中,从off位置开始写,写len个数据. public void write(String s); //写出一个字符串 public void write(String s,int off,int len); //把字符中,从off位置开始写,写len个数据. public void flush(); //强制把缓冲区中的数据给写出去 public void close(); //关闭IO流,释放资源(关闭之前会自动flush)
2.2 字符输入流
构造: public FileReader("文件路径"); //指定要读取的文件位置 方法: public int read(); //读取一个字符,如果读取不到,则返回-1 public int read(char[] chs);//读取多个字符,并把读取到的数据放入chs数组中,返回读取到的字符的个数.如果读取不到,则返回-1 public void close();//关闭IO流,释放资源
3.缓冲流(常用)
3.1 字符缓冲输出流
构造: public BufferedWriter(Writer w); 方法: public void write(String str);//写出一个字符串 public void newLine(); //输出一个换行(该换行可以根据操作系统自动切换不同的换行). public void close(); //关闭IO流,释放资源(关闭之前会自动flush)
3.2 字符缓冲输入流
构造: public BufferedReader(Reader r); 方法: public String readLine(); //一次读取一行.如果读取不到,返回null public void close(); //关闭IO流,释放资源
4.IO其他流
4.1 转换流
① InputStreamReader
概述: InputStreamReader:就是可以指定编码的FileReader. JDK11之后FileReader可以指定编码 构造: public InputStreamReader(字节输入流,"编码表名称");
② OutputStreamWriter
概述: OutputStreamWriter:就是可以指定编码的FileWriter. JDK11之后FileWriter可以指定编码 构造: public OutputStreamWriter(字节输出流,"编码表名称");
③ 作用
1.进行读写操作时,可以指定编码. 2.可以把字节流转换为字符流.
4.2 对象流
① 对象输出流->序列化流
概述: 把一个"对象"直接写到文件上,这种行为也称之为"序列化". 构造: public ObjectOutputStream(OutputStream os); 方法: public void writeObject(对象);
② 对象输入流->反序列化流
概述: 从文件上,直接读取出来一个"对象",这种行为也称之为"反序列化". 构造: public ObjectInputStream(InputStream in); 方法: public Object readObject();
③ 注意事项(掌握)
1.如果想把一个对象写到文件上,则该对象所在的类必须实现Serializable接口 2.对象所在的类需要提供一个序列化版本号 private static final long serialVersionUID = 1989733137067568637L; 3.如果不想让某个属性序列化,可以在属性上添加transient关键字
④ Serializable接口
概念: Serializable接口是一个"标记接口" 特点: 1.标记接口没有抽象方法,不需要重写. 2.标记接口仅作为一个标记,不具有任何实际意义(例如:一个类实现了Serializable,仅表示该类可以被序列化到文件上).