-
ssss查看全部
-
java是双字节编码(utf-16be): 中文两个字节 英文两个字节; GBK:中文占两个字节,英文1个字节; utf-8:中文占三个字节,英文占1个字节。 中文系统下:ANSI编码代表GBK编码。 文本文件就是字节序列, 可以是任意编码的字节序列查看全部
-
字符流 (操作的是文本 文本文件) 注意默认的编码方式 1)编码问题 2)认识文本和文本文件 java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码) 文件是byte byte byte 的数据序列 文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化byte的存储 3)字符流(Reader Writer) 字符的处理,一次处理一个字符 字符的底层依然是基本的字节序列 4)InputStreamreader 完成byte流解析成char流 按照编码解析 OutputStreamWrite 提供char流到byte流 按照编码处理查看全部
-
序列化过程中子父类构造函数调用问题 一个类实现了序列化接口,那么其子类都可以进行序列化 一、父类实现了serializable接口,子类继承就可序列化。 1、子类在反序列化时,父类实现了序列化接口,则不会递归调用其构造函数。 二、父类未实现serializable接口,子类自行实现可序列化 2、子类在反序列化时,父类没有实现序列化接口,则会递归调用其构造函数。 【反序列化时】,向上递归调用构造函数会从【可序列化的一级父类结束】。即谁实现了可序列化(包括继承实现的),谁的构造函数就不会调用。 父类实现了serializable接口,子类继承就可序列化。 1、子类在反序列化时,其父类实现了序列化接口,则不会递归调用他们的构造函数。 2、若父类没有实现serializable接口,其子类自行实现反序列化,递归调用其构造函数 结论:反序列化时,谁实现了可序列化(包括继承实现的),谁的构造函数就不会调用。查看全部
-
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查看全部
-
对象序列化和反序列化 序列化:就是将object转换成byte,反之,就是反序列化 2、序列化流(ObjectOutputStream),是过滤流 反序列化流(ObjectInputStream)-->readObject 3、序列化接口(Serializable)--》writeObject 对象必须实现序列化接口,才能进行序列化,否则将出现异常 这个接口,没有任何方法,只是一个标准 ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file)); Student stu = new Student("1001","张三",20); oos.writeObject(stu); oos.flush(); oos.close(); //反序列化 ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file)); Student stu = (Student)ois.readObject(); System.out.println(stu); ois.close();查看全部
-
字符流的过滤器 BufferedReader -- > readLine -> 读一行 不识别换行符,不会自动换行 BufferedWriter/PrintWriter -- > writeLine/println -> 写一行,不会自动换行/自动换行查看全部
-
FileReader/FileWriter:可以直接写文件名的路径。与InputStreamReader相比坏处:无法指定读取和写出的编码,容易出现乱码。只能读取与项目编码方式相同的文件 FileReader fr = new FileReader("e:\\javaio\\imooc.txt"); //输入流 FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt");//输出流查看全部
-
BufferedInputStream & BufferedOutputStream 这两个流类为IO提供了带缓冲区的操作,一般打开文件进行细耳 或读取操作时,都会加上缓冲,这种刘模式提供了IP的性能 打个比喻,从应用程序中把输入放入文件,相当于将一缸水导入到另一个缸中,方法有以下几种: FileOutputStream--->write()方法相当于一滴一滴把水“转移”过去 DataOutputStream--->writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移”过去 BufferedOutputStream--->write方法更方便,相当于一瓢一瓢先放入桶中,再从桶中倒入到缸中。 批量读取导入速度最快! 复制文件最快的做法应该是批量读取到字节数组中然后使用缓冲输出流写入到文件。并且在循环写入的过程中不要flush,要不然就失去了缓冲的意义,毕竟缓冲输出流在关闭的时候会将所有缓冲区中的数据全部写入文件。 bos.flush();//刷新缓存区查看全部
-
DataOutputStream/DataInputStream 对“流”功能的扩展,可以更加方便的读取 int,long, 字符等类型数据 DataOutputStream:使用FileOutputStream构造出来,通过包装FileOutput,可以调用FileOutput类的write方法来构造新的更方便的写方法: new DataOutputStream(new FileOutptStream(file))查看全部
-
//文件不存在,直接创建,存在,删除后建 FileOutputStream out = new FileOutputStream("demo/out.dat"); //文件不存在,直接创建,存在,追加内容 //FileOutputStream out = new FileOutputStream("demo/out.dat","ture");查看全部
-
IO流(输入流、输出流) 字节流、字符流 1.字节流 1)InputStream、OutputStream InputStream抽象了应用程序读取数据的方式 OutputStream抽象了应用程序写出数据的方式 2)EOF=End 读到-1就读到结尾 3)输入流基本方法 int b=in.read();读取一个字节无符号填充到int低八位。-1是EOF in.read(byte[] buf)读取数据填充到字节数组buf in.read(byte[] buf,int start,int size) 读取数据到字节数组buf,从buf的start位置开始,存放size长度的数据 4)输出流基本方法 out.write(int b) 写出一个byte到流,b的低8位 out.write(byte[] buf)将buf字节数组都写入到流 out.write(byte[] buf,int start,int size) 字节数组buf从start位置开始写size长度的字节倒流 5)FileInputStream--->具体实现了在文件上读取数据查看全部
-
RandomAccessFile : java提供的对文件内容的访问 既可以读文件 也可以写文件 支持随机访问文件 可以访问文件的任意位置 (1)java文件模型 : 在硬盘上的文件是byte byte byte 存储的 是数据的集合 (2)打开文件 有两种模式 rw 读写 r只读 RandomAccessFile raf=new RandomeAccessFile(file,"rw"); 文件指针, pointer=0; (3)写方法 raf.write(int) ----> 只写一个字节 (后8位) 同时指针指向下一个位置 准备再次写入 (4)读方法 int b=raf.read(); 读一个字节 (5)文件读写完成后一定要关闭 (oracle官方说明) raf.getFilePointer()获取当前指针位置 raf.length()获取文件长度 raf.seek()把指针指定到某一位置查看全部
-
文件的异常有 IOException 抛出的异常 IllegalArgumentException(); file.list() 返回当前目录下的子目录和文件的字符串数组名称 file.listFiles() 返回当前目录下的所有子目录和文件的文件数组名称 public static void listDirectory(File dir) throws IOException{ if(!dir.exist()){ throw new IllegalArgumentException("目录:"+dir+"不存在"); } if (!dir.isDirectory) { throw new IllegalArgumentException(dir+"不是目录"); } String[] filenames=dir.list(); //返回的是字符串数组 直接子的名称不包含子目录下的内容 for (String string:filenames){ system.out.println(dir+"\\"+string); } //如果要遍历子目录下的内容 需要构造File对象做递归操作, File提供了直接返回File对象的API File[] files=dir.listFiles(); //返回的是直接目录(文件)的抽象 foreach后仍为子目录 if (files!=null && files.length>0) { //说明有子目录存在 for(File file:files){ if (file.isDirectory()){ listDirectory(file); } else { system.out.println(file); } main FileUtils.listDirectory(new File("e:\\example")); //打印出目录下所有的文件名 没有子目录查看全部
-
java.io.File类用于表示文件(目录) File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件类型的内容的访问。 了解构造函数的情况。 file.exists()判断文件是否存在 file.mkdir();创建文件 多级目录创建,mkdirs() file.delete();删除文件 file.idDirectory();判断是否是目录,是目录返回true,不是或者不存在都返回false file.isFile();判断是否是文件 file.createNewFile();创建文件 File file=new File("D:/javaio/日记.txt");等价于File file=new File("D:/javaio","日记.txt"); 常用的file对象API file //file.toString()的内容 file.getAbsolutePath(); getName(); getParent();查看全部
举报
0/150
提交
取消