初学者对于I/O流的小节-下
2016-07-09 12:48
417 查看
**
**
- 对象的序列化与反序列化
对象的序列化的 意思 就是把一个 Obj 转换为一个byte 序列 。
反之 就是 反序列化
序列化流 ObjectOutputStream 是过滤流
反序列化流就是 ObjectInputStream
注: 所要保存的 Obj 必须实现 序列化接口! 这个接口里面没有任何方法
如下类 首先是序列化 之前创建了一个 这个 Student的 类 里面有学号姓名身高 三个属性
对象的反序列化
注:
1.有一种特殊情况 当 我对象中的 一个类 不想被序列化的时候 只需要在类定义的时候 加上transient 关键字 就可以了。
2.如果一个类的父类实现了序列化接口,那么他的子类可以序列化。
3.在子类进行反序列化的时候,如果其父类没有实现序列化接口,那么其父类的构造方法会被调用
- New Io –NIO
顾名思义 就是新的IO 库
原来也就是上文所提到的,i/o 是使用流的方式去处理数据,而Nio 是用块的方式去处理数据。
基础实例
加上文件通道 利用文件通道实现文件拷贝
RandomAccessFile
这个类既可以读取文件,又可以写文件。有两种模式打开文件 rw 和 r
内部有文件指针,打开文件的的时候 指针在开头。
此文章为自己总结 ,欢迎大家改正批评! 不喜勿喷
初学者对于I/O流的小节-下
****
- 对象的序列化与反序列化
对象的序列化的 意思 就是把一个 Obj 转换为一个byte 序列 。
反之 就是 反序列化
序列化流 ObjectOutputStream 是过滤流
反序列化流就是 ObjectInputStream
注: 所要保存的 Obj 必须实现 序列化接口! 这个接口里面没有任何方法
如下类 首先是序列化 之前创建了一个 这个 Student的 类 里面有学号姓名身高 三个属性
//对 对象进行序列化的实质 就是要对于对象保存 public static void main(String[] args) { File file = new File("d://Student.obj"); //这里文件后缀名可以自定义 try { OutputStream out = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(out); Student stu = new Student("20222", "小名", 180); oos.writeObject(stu); oos.flush(); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
对象的反序列化
File file = new File("d://Student.obj");//找到刚才的文件 try { InputStream in = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(in); Student stu1 = (Student)ois.readObject(); System.out.println(stu1.toString()); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }
注:
1.有一种特殊情况 当 我对象中的 一个类 不想被序列化的时候 只需要在类定义的时候 加上transient 关键字 就可以了。
2.如果一个类的父类实现了序列化接口,那么他的子类可以序列化。
3.在子类进行反序列化的时候,如果其父类没有实现序列化接口,那么其父类的构造方法会被调用
- New Io –NIO
顾名思义 就是新的IO 库
原来也就是上文所提到的,i/o 是使用流的方式去处理数据,而Nio 是用块的方式去处理数据。
基础实例
public static void main(String[] args) { //向内存申请 8 个字节的空间 的 一块缓存 ByteBuffer buf= ByteBuffer.allocate(8); System.out.println(buf.position());//头指针的位置 System.out.println(buf.limit());//限制指针的位置 System.out.println(buf.capacity());//容量大小 System.out.println("之后"); buf.put((byte)11);//写入一个元素 System.out.println(buf.position()); System.out.println(buf.limit()); System.out.println(buf.capacity()); System.out.println("之后"); buf.flip();//因为在添加的时候 这个头指针 也就是 position 会随着增加元素的操作 往后移动 //调用flip 方法就可以使得 position 回到开始的位置 System.out.println(buf.position()); System.out.println(buf.limit()); System.out.println(buf.capacity()); //取值 for (int i = 0; i < buf.remaining(); i++) { //remaining 返回当前位置 与限制之间的元素数字!! System.out.println(buf.get(i)); } }
加上文件通道 利用文件通道实现文件拷贝
public static void copy(File src,File dest) { try { FileInputStream in = new FileInputStream(src); FileOutputStream out = new FileOutputStream(dest); FileChannel fcIn = in.getChannel();//获取文件通道 FileChannel fcOut = out.getChannel(); ByteBuffer buf = ByteBuffer.allocate((int)src.length());//分配一个大小等于目标文件大小的内存块 fcIn.read(buf); buf.flip(); fcOut.write(buf); fcIn.close(); fcOut.close(); in.close(); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
RandomAccessFile
这个类既可以读取文件,又可以写文件。有两种模式打开文件 rw 和 r
内部有文件指针,打开文件的的时候 指针在开头。
public static void main(String[] args) { try { RandomAccessFile raf = new RandomAccessFile("d://a.txt", "rw"); raf.writeInt(18); raf.writeUTF("世界"); raf.seek(0);//开始读取之前 指针指定到初始的位置 //开始读取 int i = raf.readInt(); String str = raf.readUTF( aad5 ); System.out.println(str+ i); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
此文章为自己总结 ,欢迎大家改正批评! 不喜勿喷
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序