-
transient 修饰后 该元素不会被默认序列化查看全部
-
一个类要序列化,就要实现Serializable接口,反过来说,不实现Serializable就不能序列化 当父类没实现Serializable接口,子类继承父类并实现Serializable接口,子类序列化时,父类的部分是没有被序列化的,那么反序列化的时候就没办法找到父类的部分,这时候怎么办呢,就调用父类构造器初始化父类部分。查看全部
-
BufferedReader BufferedWriter/PrintWriter查看全部
-
所有能读取的东西分为:字节流和字符流 其中 有汉字的文本采用字符流去读和写,不然都采用字节流. 字节流:inputStream outputStream 字符流:inputStreamReader outputStreamWrite查看全部
-
RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件。 RandomAccessFile支持随机访问文件,可以访问文件的任意位置查看全部
-
gbk编码,中文占用2个字节,英文占用1个字节 utf-8编码,中文占用3个字节,英文占用1个字节查看全部
-
BufferedInputStream&BufferedOutputStream<br> 这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能。<br> 假如从应用程序中把输入放入文件,相当于将一缸水倒入到另一个缸中:<br> FileOutputStream--->write()方法相当于一滴一滴地把水“转移”过去<br> DataOutputStream-->writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移”过去<br> BufferedOutputStream--->write方法更方便,相当于一飘一瓢先放入桶中,再从桶中倒入到另一个缸中,性能提高了<br> <br> 注意:使用BufferedOutputStream,在每一次写入后,缓冲区要刷新,不然写不到文件中去。查看全部
-
DataOutputStream的定义: DataOutputStream dos = new DataOutputStream( new FileOutputStream(file)); //因为DataOutputStream的参数是OutputStream类型查看全部
-
file.read(byte[],begain,end)批量读取 System.currentTimeMills();返回当前时间的毫秒数,long型查看全部
-
读文件的方式<br> 1:单字节读取,不适合大文件<br> 2:批量字节读取,适合大文件的读取,比较常用,当然,一次控制读取多少字节,要适中一般是1024的倍数 IO读取结束之后一定要关闭资源查看全部
-
javaI/O输入输出流查看全部
-
序列化过程中子父类构造函数问题 一、父类实现了serializable接口,子类继承就可序列化。 1、子类在反序列化时,父类实现了序列化接口,则不会递归调用其构造函数。 二、父类未实现serializable接口,子类自行实现可序列化 2、子类在反序列化时,父类没有实现序列化接口,则会递归调用其构造函数。 *** 结论:【反序列化时】,向上递归调用构造函数会从【可序列化的一级父类结束】。即谁实现了可序列化(包括继承实现的),谁的构造函数就不会调用。查看全部
-
transient 关键字 private transient int stuage; 关键字之后jvm就不会再去默认的序列化 stuage 属性,但并不是说就不能序列化了,这时可以手动的序列化 //手动实现序列化 private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { s.defaultWriteObject(); //能默认序列化 的 就先默认序列化 s.writeInt(stuage); //自己序列化一个用transient修饰的属性 } //手动实现反序列化 private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); //能默认反序列化 this.stuage = s.readInt(); //手动完成 stuage } ArrayList中封装了对数组的操作,其内部就是有一个数组,数组里面是可以有很多的元素的,一个数组,即便是没有存满元素,但是每一个数组元素也会有一个默认的值。如果使用jvm的默认序列化的话,这样将会把数组中那些带有默认值的元素也一块序列化,这样不是就浪费了。如果可以自己手动序列化的话,我就可以有选择的型的序列化,只把数组中存储的元素序列化,别的空数组元素则不需要序列化。 注意: (1)在以后的网络编程中,如果有某些元素不需要传输,那就可以用transient修饰,来节省流量;对有效元素序列化,提高性能。 (2)可以使用writeObject自己完成这个元素的序列化。ArrayList就是用了此方法进行了优化操作。ArrayList最核心的容器Object[] elementData使用了transient修饰,但是在writeObject自己实现对elementData数组的序列化。只对数组中有效元素进行序列化。readObject与之类似。查看全部
-
字符流 之字符流的过滤器 除了具有基本的读写单个字外,更具有加强功能,可以一次性的读写一行。可以参见帮助文档,文档中的介绍更加详细,介绍到字符流的顾虑器,优化了一般的Reader的巨大开销。<br><br> Bufferedreader-->readLine()<br><br> BufferedWriter/PrintWriter 可以实现一次写一行<br> <br> /**其构造需要双层的嵌套<br> * 看看下面是一个多么恶心的嵌套,FileReader 是对一个 Reader 进行过滤 所以,构造式需要传进来一个Reader,(我们知道Reader是一个抽象类,我们只能使用起实现子类)<br> * 我们有知道,用的是Reader的实现子类 InputStreamReader,而InputStreamReader它有需要一个InputStream,我们最常用的<br> * InputStream的实现子类是FileInputStream,因为我们这里也是对文件进行操作<br> */<br> BufferedReader br = new BufferedReader(<br> new InputStreamReader(<br> new FileInputStream("e:\\Jworkspace\\code.txt")));<br> <br> BufferedWriter bw = new BufferedWriter(<br> new OutputStreamWriter(<br> new FileOutputStream("e:\\Jworkspace\\code2.txt")));<br> <br> String line;<br> while((line = br.readline())!=null) //一次读一行<br> {<br> System.out.println(line); //一次读一行不支持换行, 必须使用println<br> bw.write(line);<br> //必须要单独写出换行<br> bw.newLine();<br> bw.flush();<br> }<br> br.close();<br> bw.close()查看全部
-
FileReader/FileWriter:可以直接写文件名的路径。与InputStreamReader相比坏处:无法指定读取和写出的编码,容易出现乱码。只能读取与项目编码方式相同的文件 FileReader fr = new FileReader("e:\\javaio\\imooc.txt"); //输入流 FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt");//输出流 字符流:字符流分为输出流(Reader)和输出流(Writer)。操作的是文本文件。 字符处理,一次处理一个字符 字符处理底层还是基本的字节序列 InputStreamReader:完成byte流解析为char流,按照编码解析 FileInputStream in = new FileInputStream("e:\\javaio\\imoocutf8.txt"); //获取字符输入流 InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式 OutputStreamWriter:提供char流到byte流,按照编码处理 FileOutputStream out = new FileOutputStream("e:\\javaio\\imoocutf81.txt"); //获取字符输出流 OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");查看全部
举报
0/150
提交
取消