java笔记之IO4文本复制
* 复制文本文件。
 * 
 * 数据源:从哪里来
 * a.txt -- 读取数据 -- FileInputStream 
 * 
 * 目的地:到哪里去
 * b.txt -- 写数据  -- FileOutputStream
 * 
 * java.io.FileNotFoundException: a.txt (系统找不到指定的文件。)
 * 
 * 这一次复制中文没有出现任何问题,为什么呢?
 * 上一次我们出现问题的原因在于我们每次获取到一个字节数据,就把该字节数据转换为了字符数据,然后输出到控制台。
 * 而这一次呢?确实通过IO流读取数据,写到文本文件,你读取一个字节,我就写入一个字节,你没有做任何的转换。
 * 它会自己做转换。
 public class CopyFileDemo {
     public static void main(String[] args) throws IOException {
         // 封装数据源
         FileInputStream fis = new FileInputStream("a.txt");
         // 封装目的地
         FileOutputStream fos = new FileOutputStream("b.txt");
         int by = ;
         while ((by = fis.read()) != -) {
             fos.write(by);
         }
         // 释放资源(先关谁都行)
         fos.close();
         fis.close();
     }
 }
* 通过定义数组的方式确实比以前一次读取一个字节的方式快很多,所以,看来有一个缓冲区还是非常好的。
 * 既然是这样的话,那么,java开始在设计的时候,它也考虑到了这个问题,就专门提供了带缓冲区的字节类。
 * 这种类被称为:缓冲区类(高效类)
 * 写数据:BufferedOutputStream
 * 读数据:BufferedInputStream
 * 
 * 构造方法可以指定缓冲区的大小,但是我们一般用不上,因为默认缓冲区大小就足够了。
 * 
 * 为什么不传递一个具体的文件或者文件路径,而是传递一个OutputStream对象呢?
 * 原因很简单,字节缓冲区流仅仅提供缓冲区,为高效而设计的。但是呢,真正的读写操作还得靠基本的流对象实现。
 public class BufferedOutputStreamDemo {
     public static void main(String[] args) throws IOException {
         // BufferedOutputStream(OutputStream out)
         // FileOutputStream fos = new FileOutputStream("bos.txt");
         // BufferedOutputStream bos = new BufferedOutputStream(fos);
         // 简单写法
         BufferedOutputStream bos = new BufferedOutputStream(
                 new FileOutputStream("bos.txt"));
         // 写数据
         bos.write("hello".getBytes());
         // 释放资源
         bos.close();
     }
 }
* 字节流四种方式复制文件:
 * 基本字节流一次读写一个字节: 共耗时:117235毫秒
 * 基本字节流一次读写一个字节数组: 共耗时:156毫秒
 * 高效字节流一次读写一个字节: 共耗时:1141毫秒
 * 高效字节流一次读写一个字节数组: 共耗时:47毫秒
 public class CopyMp4Demo {
     public static void main(String[] args) throws IOException {
         long start = System.currentTimeMillis();
         // method1("e:\\哥有老婆.mp4", "copy1.mp4");
         // method2("e:\\哥有老婆.mp4", "copy2.mp4");
         // method3("e:\\哥有老婆.mp4", "copy3.mp4");
         method4("e:\\哥有老婆.mp4", "copy4.mp4");
         long end = System.currentTimeMillis();
         System.out.println("共耗时:" + (end - start) + "毫秒");
     }
     // 高效字节流一次读写一个字节数组:
     public static void method4(String srcString, String destString)
             throws IOException {
         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                 srcString));
         BufferedOutputStream bos = new BufferedOutputStream(
                 new FileOutputStream(destString));
         byte[] bys = new byte[];
         int len = ;
         while ((len = bis.read(bys)) != -) {
             bos.write(bys, , len);
         }
         bos.close();
         bis.close();
     }
     // 高效字节流一次读写一个字节:
     public static void method3(String srcString, String destString)
             throws IOException {
         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                 srcString));
         BufferedOutputStream bos = new BufferedOutputStream(
                 new FileOutputStream(destString));
         int by = ;
         while ((by = bis.read()) != -) {
             bos.write(by);
         }
         bos.close();
         bis.close();
     }
     // 基本字节流一次读写一个字节数组
     public static void method2(String srcString, String destString)
             throws IOException {
         FileInputStream fis = new FileInputStream(srcString);
         FileOutputStream fos = new FileOutputStream(destString);
         byte[] bys = new byte[];
         int len = ;
         while ((len = fis.read(bys)) != -) {
             fos.write(bys, , len);
         }
         fos.close();
         fis.close();
     }
     // 基本字节流一次读写一个字节
     public static void method1(String srcString, String destString)
             throws IOException {
         FileInputStream fis = new FileInputStream(srcString);
         FileOutputStream fos = new FileOutputStream(destString);
         int by = ;
         while ((by = fis.read()) != -) {
             fos.write(by);
         }
         fos.close();
         fis.close();
     }
 }
java笔记之IO4文本复制的更多相关文章
- 用FileInputStream实现文本复制
		import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /* * 用f ... 
- java文件和文件夹复制、删除、移动操作
		java文件和文件夹复制.删除.移动操作 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS ... 
- java笔记整理
		Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ... 
- 转 Java笔记:Java内存模型
		Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ... 
- Effective java笔记(二),所有对象的通用方法
		Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ... 
- Effective Java笔记一 创建和销毁对象
		Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ... 
- java 7中文件的复制移动
		在java 7 中文件移动复制简单方法 文件移动 Path source=Paths.get("D:\\sa\\123.txt"); Path target=Paths.get(& ... 
- 转载---Java集合对象的深度复制与普通复制
		原博文:http://blog.csdn.net/qq_29329775/article/details/49516247 最近在做算法作业时出现了错误,原因是没有弄清楚java集合的深度复制和浅度复 ... 
- java笔记00-目录
		--2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射: 
随机推荐
- C++内存分配方式——(别人的博客)
			http://www.cnblogs.com/easonpan/archive/2012/04/26/2471153.html http://blog.csdn.net/chen825919148/a ... 
- msp430入门编程26
			msp430中C语言开发工具应用 msp430入门学习 msp430入门编程 
- php的抽象类
			php的抽象类 //定义一个老虎类 abstract class Tiger{ public abstract function climb(); } //定义一个孟加拉虎类 class MTiger ... 
- httpclient自动执行http的302重定向
			今天debug过程中发现,httpclient会自动执行302的重定向,但是这个的前提是第一个请求是get发出的.我测试发现用post的后的302是系统不会自动redirect的..不知道到底正确不, ... 
- BNUOJ     Eeny Meeny Moo
			Eeny Meeny Moo Time Limit: 1000ms Memory Limit: 65535KB 大家都有这种经验,当太多的人同时使用互联网的时候 ... 
- maven 将项目打成jar包
			添加此plugin到项目的pom.xml <project xmlns=</modelVersion> <groupId>fuck</groupId> ... 
- centOS 安装mysql5.6
			删除原先的mysql5.1#数据库服务器的安装 , 请自行在mysql官方找最新的rpm rpm -Uvh http://dev.mysql.com/get/mysql-community-relea ... 
- WebLogic"域"的概念
			WebLogic Server中的域是逻辑上相关的一组 WebLogic Server 资源,可以作为一个单元进行管理.一个域中包含一台或多台 WebLogic Server,也可以包含 WebLog ... 
- 【转】 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
			原文:http://blog.csdn.net/testcs_dn/article/details/38496107 ----------------------------------------- ... 
- UILable怎样加入单击事件
			//初始化UILable UILabel *lable = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, 320, 40)]; //设置其能够接收用 ... 
