-
3.对象的序列化,反序列化 1)对象序列化,就是将Object转化成byte序列,反之叫对象的反序列化 2)序列化流(ObjectOutputStream) ---> writeObject 反序列化(ObjectInputStream) ---> readObject 3)序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化,否则将出现异常 这个接口,没有如何方法,只是一个标准查看全部
-
IO流(输入流,输出流) 2.字符流 1)编码问题 2)认识文本和文本文件 java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码) 文件是byte byte byte ...的数据序列 文本文件是文本(char)序列按照某种编码方案(UTF-8, UTF-16BE, GBK)序列化为byte的存储结果 3)字符流(Reader, Writer)--->操作的是文本文件 字符的处理,一次处理一个字符 字符的底层任然是基本的字节序列 字符流的基本实现 InputStreamReader 完成byte流解析为char流,按照编码解析 OutputStreamWriter 提供char流到byte流,按照编码处理 FileReader/FileWriter 字符流的过滤器 BufferedReader ---> readLine 一次读一行 BufferedWriter ---> PrintWriter 写一行查看全部
-
讲义1查看全部
-
FileOutputStream fos = new FileOutputStream(file,true) 文件不存在,则创建,否则在后面追加内容 FileOutputStream fos = new FileOutputStream(file) 文件不存在,则创建,否则,删除后再创建查看全部
-
单字节读取不适合大文件,大文件效率很低。 批量读取,对大文件而言效率高,最常用的方式。查看全部
-
讲义1查看全部
-
utf-8编码,中文占用三个字节查看全部
-
IO流(输入流,输出流) 1.字节流 1)InputStream,OutputStream InputStream抽象了应用程序读取数据的方式 OutputStream抽象了应用程序写出数据的方式 2)EOF = End 读取到-1就是读到结尾 3)输入流基本方法 int b = in.read(); 读取一个字节无符号填充到int低八位,-1是EOF in.read(byte[] buf); in.read(byte[] buf, int start, int size); 4)输出流基本方法 out.write(int b); 写出一个byte到流,b的低八位 out.write(byte[] buf); 将buf字节输出都写入到流 out.write(byte[] buf, int start, int size); 5)FileInputStream--->具体实现了在文件上读取数据查看全部
-
RandomAccessFile查看全部
-
public String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 exists()方法用于判断文件或目录是否存在 file.list() 返回的是 字符串数组 直接子的名称,不包含子目录下的内容 file.listFiles() 返回当前目录下的所有子目录和文件的文件数组名称 ======================================== 如果要遍历子目录下的内容就需要构造成File对象做递归操作 //throws IOException 回避了IO的抛出异常 File[] files = dir.listFiles();//返回的是直接子目录(文件)的抽象 if (file!=null && files.length > 0){ for(File file:files){ if(file.isDrectory()){ listDirectory(file); }else{ System.out.println(file); } } }查看全部
-
1.创建File对象:File file=new File(String path);注意:File.seperater();获取系统分隔符,如:”\“ 2.boolean file.exists();是否存在. 3.file.mkdir();或者file.mkdirs();创建目录或多级目录。 4.file.isDirectory()或者file.isFile()判断是否是目录或者是否是文件。 5.file.delete();删除文件或目录。 6.file.createNewFile();创建新文件。 7.file.getName()获取文件名称或目录绝对路径。 8.file.getAbsolutePath()获取绝对路径。 9.file.getParent();获取父级绝对路径。 10.file.getSize();获取文件大小。 11.file.getFormat();获取文件格式名。 file.mkdir()创建目录(一级目录),如果多级目录mkdirs(); getAbsolutePath() 如果file路径,getName返回子路径 如果file为文件,getName返回文件名称 getParent()父路径 File file = new File(路径,记住用双斜杠\\) .........ALT+/可以用于查看功能 file.exists()是否存在 file.delete()删除 isDirectory()是否是一个目录;是返回true,不是或者不存在返回false isFile()是否是文件 File file2 new File(...\\a.txt); File file2 new File(路径,子路径) file2.exists() file2.createNewFile();(捕捉异常) file2.delete(); java.io.File类用于表示文件(目录) 程序员可以通过File类在程序中操作硬盘上的文件和目录 File类只用于表示文件(目录)的信息(名称,大小等),不能用于文件内容的访问查看全部
-
序列化过程中子父类构造函数调用问题 一个类实现了序列化接口,那么其子类都可以进行序列化 一、父类实现了serializable接口,子类继承就可序列化。 1、子类在反序列化时,父类实现了序列化接口,则不会递归调用其构造函数。 二、父类未实现serializable接口,子类自行实现可序列化 2、子类在反序列化时,父类没有实现序列化接口,则会递归调用其构造函数。 *** 结论:【反序列化时】,向上递归调用构造函数会从【可序列化的一级父类结束】。即谁实现了可序列化(包括继承实现的),谁的构造函数就不会调用。 父类实现了serializable接口,子类继承就可序列化。 1、子类在反序列化时,其父类实现了序列化接口,则不会递归调用他们的构造函数。 2、若父类没有实现serializable接口,其子类自行实现反序列化,递归调用其构造函数 结论:反序列化时,谁实现了可序列化(包括继承实现的),谁的构造函数就不会调用。查看全部
-
transient关键字查看全部
-
系列化与反序列化查看全部
-
transient 关键字:被transient修饰的元素,该元素不会进行jvm默认的序列化,但可以自己完成这个元素的序列化 注意:(1)在以后的网络编程中,如果有某些元素不需要传输,那就可以用transient修饰,来节省流量;对有效元素序列化,提高性能。 (2)可以使用writeObject自己完成这个元素的序列化。ArrayList就是用了此方法进行了优化操作。ArrayList最核心的容器Object[] elementData使用了transient修饰,但是在writeObject自己实现对elementData数组的序列化。只对数组中有效元素进行序列化。readObject与之类似。 private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException private void readObject(java.io.ObjectInputStream s) throws java.io.IOException,ClassNotFoundException查看全部
举报
0/150
提交
取消