IO流

<small>

IO流

I:input,O:output,又称为输入输出流。
输入:读取操作,输出:写出操作(要站在内存的立场上理解)
根据功能不同分为:输出流,输入流,字节流,字符流,低级流,节点流,处理流,这里我们将学习 字节输入输出流和字符输入输出流

FileOutputStream

字节输出流,可以直接地文件,惊醒写出操作,可以单字节的写,也可以批量字节的写
有两个构造方法和RandomAccessFile相似,抽象地址所在的路径必须操作,否则抛出异常,如果抽象地址所在路径存在,但文件不存在,会自动创建文件
最大特点是可以实现追加写出操作
如果想要创建可以实现追加写出操作的字节输出流,那必须使用下面的构造:
new FileOutputStream(String pathName,boolean isAppend)
isAppeend为是否追加

FileInputStream

抽象地址必须存在,否则抛出异常

一个中文字符,GBK为两个字节,UTF-8为三个字节,一个英文字符,无论GBK还是UTF-8都是一个字节

BufferedOutputStream

缓冲字节输出流
不能直接对接文件或者虚拟地址,必须和一个输出流对接
new BufferedOutputStream(new(FileOutputStream) )

BufferedInputStream

缓冲字节输入流(读写文件),特点:自身维护一个字节数组,提携文件的读写效率,BufferedOutputStream也是如此。

    public static void main(String[] args) throws IOException {
        /*
         * FileInputStream构造方法
         *      new FileInputStream(String pathName)
         * 
         *      new FileInputStream(File file)
         *          
         *      注意:1、抽象地址文件必须存在,否则抛出异常。
         * 
         */
        FileInputStream fis = 
                    new FileInputStream(new File("fos.txt"));
        /*
         * 1、单字节的读取
         *      int read();
         */
        int read = fis.read();
        System.out.println(read);//98
        fis.read();//100
        fis.read();//128
        
        /*
         * 2、批量字节读取
         *      int read(byte[] buf)
         *      返回真正读取的字节数。
         */
        byte[] buf = new byte[100];
        int read2 = fis.read(buf);
        //将字节数组,转换成字符串
        String str = new String(buf,0,read2,"UTF-8");
        System.out.println(str);
        
        fis.close();
    }

}
public static void main(String[] args) throws IOException {
        /*
         * FileOutputStream构造方法
         *      new FileOutputStream(String pathName)
         * 
         *      new FileOutputStream(File file)
         *          
         *      注意:1、抽象地址所在路径必须存在,否则抛出异常。
         *           2、抽象地址所在路径存在,但文件不存在,
         *              则会自动创建文件。
         * 
         */
        FileOutputStream fos = 
                    new FileOutputStream(new File("fos.txt"));
        /*
         * 1、写出一个字节
         *      write(int i)
         */
        fos.write(98);
        
        fos.close();
        
        /*
         * 如果想创建可以实现追加写出操作的字节输出流
         *      那必须使用下面构造:
         *      new FileOutputStream(String pathName, boolean isAppend)
         * 
         *      new FileOutputStream(File file, boolean isAppend)
         * 
         *      isAppend为是否追加写出标识,默认是false。
         *      true标识追加写出。
         */
        fos = new FileOutputStream("fos.txt",true);
        fos.write(100);
        fos.write(128);
        
        /*
         * 2、批量字节写出
         *      write(byte[] buf)
         */
        String str = "我爸叫李刚";
        byte[] buf = str.getBytes("UTF-8");
        fos.write(buf);
        
        fos.close();
ObjectOutputStream

new ObjectOutputStream()
如果想让people对象,完成持久化(传输保存)到硬盘中,则people必须为可序列化.
序列化:将需要持久化的数据,转换成字节类型数据。
对象序列化:将需要持久化的引用类型对象,转换成字节类型数据。
序列化接口,仅为标识接口,没有任何抽象方法。
只要类实现该接口,就意味着可以进行持久化操作。

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
  // TODO Auto-generated method stub
  ObjectOutputStream oos=new ObjectOutputStream(
    new BufferedOutputStream(
      new FileOutputStream("/Users/itachi/Downloads/demo1.txt")));
  People peo=new People("Jack",18,'M');
  oos.writeObject(peo);
  oos.close();
  ObjectInputStream ois=new ObjectInputStream(
    new BufferedInputStream(
      new FileInputStream("/Users/itachi/Downloads/demo1.txt")));
  Object obj=ois.readObject();
  System.out.println(obj);
 }

}
class People implements Serializable {
                 默认添加序列化的版本号
     *      用于在写出读取对象信息时,
     *      验证对象是否为同一个对象。
 private static final long serialVersionUID = 1L;
 private String name;
 private int age;
 private char gendar;
/*
     * 如果对于不需要保存的字段,
     *  可以通过transient关键字,
     *  直接作用在字段上,就不会被保存。
     *  从而一定程度对象实现“瘦身”效果。
     */
    transient
    private double salary;
  
 public People() {
 }
 
 public People(String name, int age, char gendar) {
  this.name = name;
  this.age = age;
  this.gendar = gendar;
 }

 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public char getGendar() {
  return gendar;
 }
 public void setGendar(char gendar) {
  this.gendar = gendar;
 }

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

推荐阅读更多精彩内容