-
字符流过滤器的创建查看全部
-
字符流的过滤器: BufferedReader ———》readLine 一次读一行; BufferedWriter/PrintWriter 写一行查看全部
-
FileReader/FileWriter:可以直接写文件名的路径。与InputStreamReader相比坏处:无法指定读取和写出的编码,容易出现乱码。只能读取与项目编码方式相同的文件<br> FileReader fr = new FileReader("e:\\javaio\\imooc.txt"); //输入流<br> FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt");//输出流<br> 字符流:字符流分为输出流(Reader)和输入流(Writer)。操作的是文本文件。<br> 字符处理,一次处理一个字符<br> 字符处理底层还是基本的字节序列<br> InputStreamReader:完成byte流解析为char流,按照编码解析<br> FileInputStream in = new FileInputStream("e:\\javaio\\imoocutf8.txt");<br> //获取字符输入流<br> InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式<br> OutputStreamWriter:提供char流到byte流,按照编码处理<br> FileOutputStream out = new FileOutputStream("e:\\javaio\\imoocutf81.txt");<br> //获取字符输出流<br> OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");查看全部
-
public static void main(String[] args)throws IOException { FileInputStream in = new FileInputStream("e:\\javaio\\imoocutf8.txt"); InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式 FileOutputStream out = new FileOutputStream("e:\\javaio\\imoocutf81.txt"); OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8"); /*int c ; while((c = isr.read())!=-1){ System.out.print((char)c); }*/ char[] buffer = new char[8*1024]; int c; /*批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个 返回的是读到的字符的个数 */ while(( c = isr.read(buffer,0,buffer.length))!=-1){ String s = new String(buffer,0,c); System.out.print(s); osw.write(buffer,0,c); osw.flush(); } isr.close(); osw.close(); }查看全部
-
字符流 1)编码问题 前已述及 起码有一点要非常清楚的是,一切进入计算机的都会变成字节码 2)认识文本和文本文件 java中的文本(其实就是char)16位的无符号整数,是字符的unicode编码(这是一种双自己编码) 文件是byte byte byte...的数据集合,可以缩句来理解 文件输数据集合。字节流的编码方式和序列化规则不一样就形成了不同的文件:文本文件,音频文件,视频文件等 文本文件是文本(char的编码)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的数据存储集合 (3)字符流 抽象类 Reader Writer 二者实现了数据的两种相互转换,存储时我们用字节码的形式存储,读入计算机内存处理(包括显示,运算等)是用字符(ABC...)的形式。 字符的处理,一次处理一个字符。其底层仍然是基本的字节序列 字符流的基本实现 InputStreamReader 完成byte流解析为char流,按照编码接卸 OutputStreamWriter 提供char流到byte流,按照编码处理。 为什么上面特别说明了一下文本文件,因为字符流大部分操作的都是文本文件。毕竟文本文编,以编码的方式不容易认读,我们才把字符编码解析为字符。如果Reader一个MP3之类的音频文件,根本就没有什么意义,因为,声音本来就不是用来看的,所以说字符流主要是用于处理文本文件的查看全部
-
exist判断文件是否存在,boolean值。查看全部
-
一个类进行了序列化接口,那么它的子类都可以进行序列化查看全部
-
File Data Buffered OutputStream与InputStream区别查看全部
-
DataOutputStream使用查看全部
-
字节流之——数据输入输出流查看全部
-
1.中文占2个字节,英文占一个字节 2.查看全部
-
序列化过程中子父类构造函数问题 一、父类实现了serializable接口,子类继承就可序列化。 1、子类在反序列化时,父类实现了序列化接口,则不会递归调用其构造函数。 二、父类未实现serializable接口,子类自行实现可序列化 2、子类在反序列化时,父类没有实现序列化接口,则会递归调用其构造函数。 *** 结论:【反序列化时】,向上递归调用构造函数会从【可序列化的一级父类结束】。即谁实现了可序列化(包括继承实现的),谁的构造函数就不会调用。查看全部
-
序列化: transient 关键字:被transient修饰的元素,该元素不会进行jvm默认的序列化,但可以自己完成这个元素的序列化 注意: (1)在以后的网络编程中,如果有某些元素不需要传输,那就可以用transient修饰,来节省流量;对有效元素序列化,提高性能。 (2)可以使用writeObject自己完成这个元素的序列化。ArrayList就是用了此方法进行了优化操作。ArrayList最核心的容器Object[] elementData使用了transient修饰,但是在writeObject自己实现对elementData数组的序列化。只对数组中有效元素进行序列化。readObject与之类似。 (3)java.io.ObjectOutputStream.defaultWriteObject(); // 把jvm能默认序列化的元素进行序列化操作 java.io.ObjectOutputStream.writeInt(age);// 自己完成序列化 (4) java.io.ObjectOutputStream.defaultReadObject();// 把jvm能默认反序列化的元素进行反序列化 this.age = java.io.ObjectOutputStream.readInt(); // 自己完成age的反序列化操作查看全部
-
IO——对象的序列化和反序列化 一、概念 1、对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化 2、序列化流(ObjectOutputStream),字节的过滤流 —— writeObject()方法 反序列化流(ObjectInputStream)—— readObject()方法 3、序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化,否则将出现异常。 这个借口,没有任何方法,只是一个【标准】 二、transient关键字 1、transient修饰的元素,不会进行JVM默认的序列化:如int transient age = 10;在序列化和反序列化后,age的值为默认分配的值0 2、可以自己通过重写序列化操作方式,来对transient修饰的元素进行想要的序列化。 ***方法:通过从ArrayList中拿到writeObject()和readObject()方法,进行自写完成。 · 先执行s.defaultWriteObject(); 和 s.defaultReadObject()方法 · 再对于无法默认序列化的成员,可以进行.writeObject(obj)和this.obj = s.readObject()完成序列化 3、这样做的目的是提高效率。如ArrayList里,对数组的有效对象进行序列化查看全部
-
FileReader和FileWriter不能增加编码参数,所以当项目和读取文件编码不同时,就会产生乱码。 这种情况下,只能回归InputStreamReader和OutputStreamWriter。 BufferedReader -- > readLine -> 读一行 不识别换行符,不会自动换行 BufferedWriter/PrintWriter -- > writeLine/println -> 写一行,不会自动换行/自动换行 在文件中换行,可以用newLine();实现查看全部
举报
0/150
提交
取消