-
在中文机上创建的文本默认为ANSI编码,但它认识其他中文编码,如gbk,utf-8等。创建一个java工程改变编码方式为utf-8,若把文件复制到gbk编码的java工程里会出现乱码,但若是复制文件里的内容就不会出现乱码。也即编码方式要一致查看全部
-
序列化过程中子父类构造函数调用问题 (1)一个类实现了序列化接口,那么其子类都可以进行序列化 (2)一、父类实现了serializable接口,子类继承就可序列化。 1、子类在反序列化时,父类实现了序列化接口,则不会递归调用其构造函数。 二、父类未实现serializable接口,子类自行实现可序列化 2、子类在反序列化时,父类没有实现序列化接口,则会递归调用其构造函数。 【反序列化时】,向上递归调用构造函数会从【可序列化的一级父类结束】。即谁实现了可序列化(包括继承实现的),谁的构造函数就不会调用。 1、子类在反序列化时,其父类实现了序列化接口,则不会递归调用他们的构造函数。 2、若父类没有实现serializable接口,其子类自行实现反序列化,递归调用其构造函数 结论:反序列化时,谁实现了可序列化(包括继承实现的),谁的构造函数就不会调用。查看全部
-
分析ArrayList源码中序列化和反序列化的问题!!!查看全部
-
序列化: 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的反序列化操作查看全部
-
(1)对象的序列化 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file)); Student stu = new Student("10001","张三",20); oos.writeObject(stu); oos.flush(); oos.close(); (2)对象的反序列化 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file)); Student stu = (Student)ois.readObject(); System.out.println(stu); ois.close();查看全部
-
文件传输基础 6--1 序列化基本操作 对象的序列化,反序列化 (1)对象序列化:将Object转换成 byte序列,反之叫对象的反序列化 (2)序列化流(ObjectOutputStream),是过滤流------writeObject 反序列化流(ObjectInputStream)----readObject (3)序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化,否则将出现异常 这个接口,没有任何方法,只是一个标准查看全部
-
(1)相比 PrintWriter pw = new PrintWriter("e:\\javaio\\imooc.txt"); 方便很多 (2)PrintWriter pw1 = new PrintWriter(outputStream,boolean autoFlush); // 输出流,自动刷新查看全部
-
BufferedReader -- > readLine -> 读一行 不识别换行符,不会自动换行 BufferedWriter/PrintWriter -- > writeLine/println -> 写一行,不会自动换行/自动换行 在文件中换行,可以用newLine();实现 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("e:\\javaio\\imooc.txt"))); // 使用 readLine 函数查看全部
-
FileReader/FileWriter:可以直接写文件名的路径。与InputStreamReader相比坏处:无法指定读取和写出的编码,容易出现乱码。只能读取与项目编码方式相同的文件 FileReader fr = new FileReader("e:\\javaio\\imooc.txt"); //输入流 FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt");//输出流查看全部
-
InputStream、OutputStream 抽象了应用程序读写数据方式(父类,抽象类) FileInputStream、FileOutputStream (子类) EOF=End 及文件结尾(读到-1)(is.read()=-1) 输入流基本方法 read(); 输入流基本方法 int b=in.read();读取一个字节无符号填充到int的低八位,前面的24位补零。(int是32位,一个字节8位)-1是EOF in.read(byte[] buf);读取数据填充到字节数组buf in.read(byte[] buf,int start,int size),同上,从buf的start位置开始存放size长度的数据 输出流基本方法 out.write(int b) 写出一个byte到流,b的低八位 out.write(byte][] buf) 将buf字节数组都写入到流 out.write(byte[] buf,int start,int size);同上,详见read对应方法 FileInputStream 具体实现了文件上读取数据查看全部
-
缓冲需要flush查看全部
-
BufferedInputStream查看全部
-
RandomAccessFile java提供的对文件的访问,即可读文件,也可写文件 RandomAccessFile支持随机访问文件,可以访问文件的任意位置 java文件模式 在硬盘的文件是byte byte byte 存储的,是数据的集合 打开文件 : rw 读写 r只读 RandomAccessFile raf = new RandomAccessFile(file,"rw");//要指定读写方式 文件指针,打开文件时指针在开头pointer = 0;随着读写操作指针后移 写方法 raf.write(int)只写一个字节(后八位)同时指针指向下一个字节位置准备下一次写入 读方法 int b=raf.read()读一个字节 文件读写完成之后一定要关闭:raf.close();查看全部
-
DataOutputStream / DataInputStream 对“流”功能的扩展,可以更加方便的读取int,long,字符等类型数据DataOutputStream writeInt() / writeDouble() / writeUTF() DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));查看全部
-
file.list() 返回的是 字符串数组 直接子的名称,不包含子目录下的内容 file.listFiles() 返回当前目录下的所有子目录和文件的文件数组名称 File[] files = dir.listFiles();//返回的是直接子目录(文件)的抽象 if (file!=null && files.length > 0){ for(File file:files){ if(file.isDrectory()){ listDirectory(file); }else{ System.out.println(file); } } }查看全部
举报
0/150
提交
取消