1 dos.writeInt(10); 2 dos.writeInt(-10); 3 dos.writeLong(10l); 4 dos.writeDouble(10.0); dos.writeUTF("中国"); dos.writeChars("中国");
3.read方法使用
以上述的写方法对立,看下面例子用来读出刚刚写的文件
1 String file="demo/data.txt"; 2 IOUtil.printHex(file); 3 DataInputStream dis=new DataInputStream(new FileInputStream(file)); 4 int i=dis.readInt(); 5 System.out.println(i); 6 i=dis.readInt(); 7 System.out.println(i); 8 long l=dis.readLong(); 9 System.out.println(l); 10 double d=dis.readDouble(); 11 System.out.println(d); 12 String s= dis.readUTF(); 13 System.out.println(s); 14 dis.close();
运行结果:
总结:DataInputStream和DataOutputStream其实是对FileInputStream和FileOutputStream进行了包装,通过嵌套方便我们使用FileInputStream和FileOutputStream的读写操作,它们还有很多其他方法,大家可以查询API。
注意:进行读操作的时候如果类型不匹配会出错!
五、字节流的缓冲流BufferredInputStresam&BufferredOutputStresam这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能。
从应用程序中把输入放入文件,相当于将一缸水倒入另一个缸中:
FileOutputStream---->write()方法相当于一滴一滴地把水“转移”过去
DataOutputStream---->write()XXX方法会方便一些,相当于一瓢一瓢地把水“转移”过去
BufferedOutputStream---->write方法更方便,相当于一瓢一瓢水先放入一个桶中(缓冲区),再从桶中倒入到一个缸中。提高了性能,推荐使用!
上述提到过用FileInputStream和FileOutputStream结合写的一个拷贝文件的案例,这次通过字节的缓冲流对上述案例进行修改,观察两者的区别和优劣。
主函数测试:
1 try { 2 long start=System.currentTimeMillis(); 3 //IOUtil.copyFile(new File("C:\\Users\\acer\\Desktop\\学习路径.docx"), new File("C:\\Users\\acer\\Desktop\\复制文本.docx")); 4 long end=System.currentTimeMillis(); 5 System.out.println(end-start); 6 } catch (IOException e) { e.printStackTrace(); 9 }
(1)单字节进行文件的拷贝,利用带缓冲的字节流* 单字节进行文件的拷贝,利用带缓冲的字节流 copyFileByBuffer(File srcFile,File destFile)throws IOException{ 5 if(!srcFile.exists()){ IllegalArgumentException("文件:"+srcFile+"不存在"); 7 } 8 if(!srcFile.isFile()){ IllegalArgumentException(srcFile+"不是一个文件"); 10 } 11 BufferedInputStream bis=new BufferedInputStream(new FileInputStream(srcFile)); 12 BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(destFile)); 13 int c; 14 while((c=bis.read())!=-1){ 15 bos.write(c); } 18 bis.close(); 19 bos.close(); 20 }
运行结果(效率):
(2)单字节不带缓冲进行文件拷贝* 单字节不带缓冲进行文件拷贝 copyFileByByte(File srcFile,File destFile)throws IOException{ 5 if(!srcFile.exists()){ IllegalArgumentException("文件:"+srcFile+"不存在"); 7 } 8 if(!srcFile.isFile()){ IllegalArgumentException(srcFile+"不是一个文件"); 10 } 11 FileInputStream in=new FileInputStream(srcFile); 12 FileOutputStream out=new FileOutputStream(destFile); 13 int c; 14 while((c=in.read())!=-1){ 15 out.write(c); } 18 in.close(); 19 out.close(); 20 }