对象流:ObjectInputStream、ObjectOutputStream
用于存储和读取基本数据类型数据或对象的处理流,强大之处在于把java中的对象写入到数据源,并能把对象中数据源还原回来
还原原理:序列化:用ObjectOutputStream类保存基本类型数据或对象的机制
反序列化:用ObjectInputStream类读取基本数据类型或对象的机制
/** * 对象流的使用 * 1.ObjectInputStream和ObjectOutputStream * 2.作用:用于存储和读取基本数据类型或对象的处理流。 * * 序列化过程,将内存中的java对象保存到磁盘中或通过网络传输出去 * 使用ObjectOutputStream实现 * * 反序列化过程:将磁盘中文件的对象还原回为内存中的java对象 * 使用ObjectInputStream实现 */ @Test public void testObjectOutputStream() { ObjectOutputStream oos = null; try { // 把数据写入到磁盘中 oos = new ObjectOutputStream(new FileOutputStream("readme1.text")); oos.writeObject(new String("我爱北京天安门")); oos.flush();//刷新操作 oos.writeObject(new Person(18,"luck")); oos.flush();//刷新操作 } catch (IOException e) { e.printStackTrace(); } finally { try { if (oos != null) { oos.close(); } } catch (IOException e) { e.printStackTrace(); } } } @Test public void testObjectInputStream() { ObjectInputStream ois = null; try { ois = new ObjectInputStream(new FileInputStream("readme1.text")); Object obj = ois.readObject(); String str = (String) obj; Person person= (Person) ois.readObject(); System.out.println(str); System.out.println(person); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { } try { if (ois != null) { ois.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** *Person需要满足如下的要求,方可序列化 * 1,需要实现接口:Serializable * 2.当前类提供一个全局常量:seriaLVersionUID * 注意:static、transient修饰的成员变量不能序列化。 */ class Person implements Serializable{ private static final long serialVersionUID = 6728326784846016375L; private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" + "age=" + age + ", name='" + name + '\'' + '}'; }
常见编码表:ASCII:美国标准信息交换码,用一个字节的7位来表示
ISO8859-1:拉丁码表、欧洲码表,用一个字节的8位表示
GB2312:中国的中文编码表,最多两个字节编码所有字符
GBK:中国的中文编码表升级,融合更多中文字符,最多两个字节编码
Unicode(16进制):国际标准码,涵盖目前人类所有字符,所有文字都用2个字节表示
UTF-8(2进制):变长的编码方式,可用1-4个字节表示字符,兼容ASCII
java1.4版本开始引入java NIO替代标准的java IOAPI,拥有同样的作用,但方式完全不同。NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作,更加高效的读写文件
java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套是网络编程NIO