HTML5技术

【Java IO流】字节流和字符流详解 - 云开的立夏(3)

字号+ 作者:H5之家 来源:H5之家 2017-09-15 15:06 我要评论( )

1 dos.writeInt(10 ); 2 dos.writeInt(-10 ); 3 dos.writeLong(10l ); 4 dos.writeDouble(10.0 ); dos.writeUTF("中国" ); dos.writeChars("中国"); 3.read方法使用 以上述的写方法对立,看下面例子用来读出刚刚写

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 }

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • this的用法 – JavaScript深入浅出(二) - OkayChen

    this的用法 – JavaScript深入浅出(二) - OkayChen

    2017-09-15 12:00

  • JavaScript: 使用 atan2 来绘制 箭头 和 曲线 - 救火队长

    JavaScript: 使用 atan2 来绘制 箭头 和 曲线 - 救火队长

    2017-09-14 08:04

  • 大龄程序员肉翻记录【一】 - JavaNerd

    大龄程序员肉翻记录【一】 - JavaNerd

    2017-09-13 09:01

  • Java基础精选,你答对了几道? - 小柒2012

    Java基础精选,你答对了几道? - 小柒2012

    2017-09-09 17:11

网友点评
c