IO流

package nodstream;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class TestFileCopy {

    /**
     * 测试文件拷贝
     * 
     *  \转义字符 :使得紧跟在它之后的字符就按本意处理,不做任何特殊用途
     */
    public static void main(String[] args) throws Exception{
        //读取源文件的输入流
        FileInputStream fis = new FileInputStream("f:\\corejava\\1.png");
        
        //写备份文件的输出流
        FileOutputStream fos = new FileOutputStream("copy1.png");
        
        //边读边写
        byte[] b = new byte[100];
        
        while(true){
            int n = fis.read(b);
            if(n==-1) break;
            fos.write(b,0,n); // 防着最后一次读到的数据(不一定完全装满数组b)
        }

        fis.close();
        fos.close();
    }

}

IO流
一.流

  1. 概念:是对象,用来在内存和外部的存储设备之间交换数据的通道。

  2. 分类
    1)方向: 输入流 输出流 【判定标准,以当前程序为参照物】
    2)单位:
    字节流 -- 以字节为单位传递数据 , 可以传递任意类型的数据
    字符流 -- 以字符为单位传递数据 , 只可以读写文本文件
    3)功能:
    节点流 -- 实际负责数据传递的流对象
    过滤流 -- 负责为其他流对象添加辅助功能的流对象

二.字节流

  1. 字节流父类:OutputStream(字节输出流) | InputStream(字节输入流)

  2. 字节节点流 【重点】
    1)FileOutputStream : 文件字节输出流

    2)FileInputStream :文件字节输入流

2016-11-07_230746.png
  1. 字节过滤流

1)DataInputStream | DataOutputStream
I. 提供了直接读写8种基本数据类型的功能
II. 提供了直接读写String的方法(writeUTF readUTF )

  1. BufferedInputStream | BufferedOutputStream
    I. 提供了缓存功能的字节过滤流,以空间换时间,减少访问硬盘的次数,提高数据
    传输速度。缓存功能对于输入流效果不明显
    II. 缓冲器输出:
    A. 关闭流时,会自动flush
    B. 数据将缓冲区填满,会自动flush
    C. 手动输出: 需要调用流对象的flush()

3)ObjectInputStream | ObjectOutputStream
I. 提供了直接读写对象 以及 8种基本数据类型数据 的功能
提供了缓冲功能 --- 可以用它替换上面两种过滤流
II. 对象只有能够序列化,才能放在流里传递
实现类Serializable接口的对象,就是可序列化的对象
注意:Serializable接口是一个“标记接口”
III. 不需要参与序列化的属性,可以用关键字transient修饰
IV. 对象以及对象的所有属性都必须是可序列化的,才能通过流传递
V. 读取对象的输入流以抛出EOFException的形式提示用户文件读取完毕

4)PrintStream --- System.out

三.字符编码

  1. ASCII编码 --- 美国
  2. GB2312 --- 中国,国标
  3. GBK ---- 国标的扩展
  4. BIG5 ---- 中文繁体,台湾
  5. ISO8859_1 --- 西欧,希腊,阿拉伯,泰语,希伯来
  6. UTF-8 ---- 国际统一编码,是可变长的unicode

注意:如果编解码方式不统一,则可能导致乱码

四.字符流

  1. 父类 : Reader | Writer

  2. 节点流:
    FileWriter

    1. write(int c) --- 向流里写一个字符
      2)write( char[] c) --- 向流里写一个字符数组
      3)write(String str) --- 向流里写一个String
      FileReader
      1)read() --- 读取一个字符,返回字符的int形式,-1结束
      2)read(char[] c) ---一次读取多个字符,存入数组返回,返回值为读到的个数,
      -1结束
  3. 过滤流
    BufferdReader | PrintWriter --- 带缓冲功能的字符流
    1)PrintWriter提供了大量的println方法,输出方便
    2)BufferedReader 提供了readLine(),一次读取一行文字,直到读到行结束符为止。
    这是一个阻塞方法。

    InputStreamReader | OutputStreamWriter ---- “桥转换器”
    1)负责将一个字节流转换成字符流
    2)可以在构建过程中,指定编码方式(唯一一个可以指定编码的流)
    通常和FileInputStream配合,用来读取指定了编码的文本文件

五.流总结
流程序的编程步骤:
1. 创建节点流对象 (优选FileInputStream,FileOutputStream)
2. 封装过滤流 (优选“桥转换器”,带缓冲的字符过滤流)
3. 读写数据 ( println 和 readLine )
4. 关闭流对象

2016-11-07_230720.png

六.File类 (辅助类)

  1. 概念:一个File类的对象代表了文件系统里的一个文件或者目录,使用File类不能改变文件内容,只能设置一些属性。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 概述: 1、IO流:即Input Output的缩写。 2、特点:1)IO流用来处理设备间的数据传输。2)Java...
    玉圣阅读 1,238评论 0 3
  • 概述 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是...
    wustor阅读 1,787评论 5 6
  • # Java 流式输入 输出原理 # Java 流的分类 # 输入 输出 流 类 # 常见的节点流 和 处理流 #...
    时待吾阅读 318评论 0 0
  • 图片来源于互联网 一、IO流概述 IO流用于处理设备之间的数据传输问题。Java对数据的操作,通过流的形式。操作存...
    比轩阅读 717评论 0 3
  • # 3.1 File # ## 3.1.1 File基本概念 ## 1.基本概念 -File类用于表示文件(目录)...
    闫子扬阅读 455评论 0 0