-
public class IOUtilTest4 { public static void main(String[] args) throws IOException { long star = System.currentTimeMillis(); // IOUtil.copyFileByByte(new File("E:\\SHL\\imooc\\宮崎歩 - brave heart.mp3"), new File("E:\\SHL\\imooc\\copy..宮崎歩 - brave heart.mp3"));//5w多毫秒 // IOUtil.copyFileByBuffer(new File("E:\\SHL\\imooc\\宮崎歩 - brave heart.mp3"),new File("E:\\SHL\\imooc\\copyFileByBuffer..宮崎歩 - brave heart.mp3"));//200多毫秒 IOUtil.copyFile(new File("E:\\SHL\\imooc\\宮崎歩 - brave heart.mp3"),new File("E:\\SHL\\imooc\\copyFile宮崎歩 - brave heart.mp3"));//15毫秒 long end = System.currentTimeMillis(); System.out.println(end-star); } }查看全部
-
缓冲字节流这一节希望重新录更正错误,使用缓冲字节流复制确实是最快的方式,但对于小文件10M以下的文件体现不出优势,对于百兆文件正确使用,时间可以控制到50ms内。视频中的缓冲字节流使用有错误,复制文件最快的做法是将批量读取到的字节数组使用缓冲写入到文件,在机器性能范围内字节数组越大越快。在循环写入的过程中不需要使用flush,就像cwt8805说的,缓冲输入流在关闭的时候会将所有缓冲区的数据全部写入文件,使用flush刷新缓冲就失去了缓冲的意义。最后关闭IO流和文件流应该在finally中关闭,否则IO异常时执行不到close语句,IO流仍然没有关闭。查看全部
-
readInt readLong 方法都是对FileInputStream方法的包装 DataOutputStream/DataInputStream 对“流”功能的扩展,可以更加方便的读取 int,long, 字符等类型数据 DataOutputStream:使用FileOutputStream构造出来,通过包装FileOutput,可以调用FileOutput类的write方法来构造新的更方便的写方法: new DataOutputStream(new FileOutptStream(file)) wrieteUTF()采用utf-8编码写出字符串 用utf-16be写出字符串,或字符串数组 写完之后一定要关闭流 数据输入输出流: DataInputStream、DataOutputStream 是对“流”功能的扩展,方便读写 DataOutputStream dos = new DataOutputStream(new FileOutputStream(file)); dos.writeInt(10); dos.writeLong(10l);字母l dos.writeDouble(10.5); //采用utf-8编码写出 dos.writeUTF("中国"); //采用utf-16be编码写出 dos.writeChars("中国");查看全部
-
/** * 文件拷贝,字节批量读取 * @param srcFile * @param destFile * @throws IOException */ public static void copyFile(File srcFile,File destFile) throws IOException { if (!srcFile.exists()){ new IllegalArgumentException("文件:"+srcFile+"不存在"); } if (!srcFile.isFile()){ new IllegalArgumentException(srcFile+"不是文件"); } FileInputStream in = new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(destFile); byte[] buf = new byte[8*1024]; int b; while ((b = in.read(buf,0,buf.length))!=-1){ //让buff数组里的内容读入到该输出流中(out) out.write(buf,0,b); out.flush();//最好加上 } in.close(); out.close(); }查看全部
-
1、byte 类型 8 位,int 类型 32 位,为了避免数据转换错误,通过 & 0xff 将高 24 位清零 2、long time = System.currentTimeMillis() 当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量) 3、is.read() 单字节适合读取 小 文件 is.read(byte[] bytes,int star,int size) 字节数组适合读取 大 文件 读取文件最常用的是批量读取int bytes = fis.read(buf, 0 , buf.length); FileInputStream文件输入 单字节输入即不用数组。 /** * 批量读取,对大文件而言效率高,也是我们最常用的读文件的方式 * @Inparam fileName * @throws IOException */ public static void printHexByByteArray(String fileName)throws IOException{ FileInputStream in = new FileInputStream(fileName); byte[] buf = new byte[8 * 1024]; /*从in中批量读取字节,放入到buf这个字节数组中, * 从第0个位置开始放,最多放buf.length个 * 返回的是读到的字节的个数 */ int bytes = in.read(buf,0,buf.length);//一次性读完,说明字节数组足够大 int j = 1; for(int i = 0; i < bytes;i++){ System.out.print(Integer.toHexString(buf[i] & 0xff)+" "); if(j++%10==0){ System.out.println(); } }查看全部
-
IO流分为输入流、输出流 还有字节流、字符流 1、字节流: (1)InputStream:抽象了应用程序读取数据的方式 (2)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长度的字节到流查看全部
-
RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件。支持随机访问文件,可以访问文件的任意位置。 java文件模型 在硬盘上的文件时 byte byte byte存储的,是数据的集合 打开文件 两种模式:“rw”(读写),“r”(只读) RandomAccessFile raf = new RandomAccessFile(File,"rw") 文件指针,打开文件时指针在开头 pointer = 0; 写方法: raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入 读方法: int b = raf.read()--->读一个字节 文件读写完成以后一定要关闭 raf.close()查看全部
-
*********************File遍历目录****************************** File的过滤,遍历等操作 列出指定目录下的(包括子目录)的所有文件 File file = new File(); exists() 方法用于判断文件或目录是否存在 isDirectory()方法判断File类的对象是否是目录 throw new IllegalArgumentException();抛出异常 String[] filenames = file.list() //返回的是字符串数组,列出当前目录下的所有子目录和文件,不包含子目录下的内容 //递归 for(String string : filenames){//将filenames数组中的值,循环赋值给string,直到filenames为空时,结束循环 System.out.println(string); } //如果要遍历目录下的内容就需要构造成File对象做递归操作,File提供了直接返回File对象的API File[] files = file.listFiles(); //返回的是直接子目录(文件)的抽象 //递归,遍历出该目录下所有文件信息,包括子目录下的文件 for(File f :files){ if(f.isDirectory){ //递归遍历该目录下的子目录的信息 listDirectory(file); } else{ System.out.pritln(file); } }查看全部
-
Java.IO.File类表示文件或目录,只用于表示文件或目录得信息,不能用于文件的访问。 常用的API: 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();获取文件格式名。查看全部
-
中文机器上创建的文本文件只能识别ansi编码 如果是由其他地方创建的文本文件 再拷贝出来的则可以识别任意的编码 UTF-8编码 汉字占3个字节 英文占一个 gbk编码 汉字占2个字节 英文占1个 UTF-16be编码是java中的编码 汉字和英文都是占两个字节 .getBytes();将字符串变成byte类型 integer.toHexString();将字节流变成16进制的int类型 用什么编码将字符串变成字节流 就要用同样的编码才能将其变回去 new String(“dd”,"UTF-8");可以自己选择编码方式 缺省则是默认工程属性中默认的编码查看全部
-
java I/O 输入输出流查看全部
-
父类实现序列化接口,其所有子类均无需再实现序列化接口也能被序列化。 对子类进行序列化操作,父类的构造方法会被递归调用 但是子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么其父类的构造方法会被调用,如果已实现则不会被调用。(父类没有实现序列化接口,那么子类反序列化时,没法从文件中找到父类,只能调用构造方法初始化父类)查看全部
-
手动完成序列化反序列化操作 复制ArrayList中的方法(writeInt可用writeObject替换)查看全部
-
transient修饰的变量不会进行默认的序列化查看全部
-
字符流 使用PrintWriter替换BufferedWriter查看全部
举报
0/150
提交
取消