IO流

作者: 哈哈海 | 来源:发表于2016-11-07 23:45 被阅读0次
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类不能改变文件内容,只能设置一些属性。

相关文章

  • java基础-day20-IO流和StringBuffer

    IO流和StringBuffer 1. IO流 1.1 IO流概述 1.2 IO流分类 1.3 文件操作输入输出字...

  • Java之IO流详解

    title: Java之IO流详解tags: Java IO流categories: Java IO流 大多数应用...

  • 15_IO流

    IO流介绍 IO流是一个流水模型:IO理解成水管,把数据理解成水流 IO流的分类:按照流的方向分为:输入流、输出流...

  • IO流

    一、IO流 1.1 IO的概述 IO流介绍 IO:输入/输出(Input/Output) 流:是一种抽象概念,是对...

  • java io 流

    java io 流 io 流总览 io 流主要提供四个接口 InputStream: 输入字节流 OutputSt...

  • Java IO流(一)

    IO(Input Output)流的概述 下面给出IO流的基本概述,这样可以对IO流有一个宏观上的基本了解。 IO...

  • IO流

    一、IO流的概述: 二、IO流的分类: 三、字节缓冲流: 四、字符缓冲流: 五、转换流(把字节流转换为字符流): ...

  • IO流

    IO流的使用 今天咱们来说一下JAVA中最常用的数据处理的流 IO 流,说到IO啊,玩DOTA的小伙伴们就有声音...

  • IO流

    大家好,我是IT修真院深圳分院java第4期学员,一枚正直善良的java程序员。今天给大家分享一下,Java简单的...

  • IO流

    Input Output 输入流和输出流,字节流和字符流

网友评论

      本文标题:IO流

      本文链接:https://www.haomeiwen.com/subject/fmqauttx.html