首页 > 其他 > 详细

Io流

时间:2021-04-06 20:25:56      阅读:22      评论:0      收藏:0      [点我收藏+]

1.IO流结构

技术分享图片

2.转换流

  • InputStreamReader:是从字节流到字符流的桥梁,父类是Reader

    ? 它读取字节,并使用指定的编码将其解码为字符

    ? 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

  • OutputStreamWriter:是从字符流到字节流的桥梁,父类是Writer

    ? 是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节

    ? 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

    import java.io.*;
    import java.nio.charset.Charset;
    
    public class InputStreamReaderDemo {
        public static void main(String[] args) throws IOException {
            OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("C:\\Users\\余生\\Desktop\\a.txt"),"gbk");
            osw.write("老铁666");
            osw.close();
            InputStreamReader isr=new InputStreamReader(new FileInputStream("C:\\Users\\余生\\Desktop\\a.txt"),"gbk");
            int len;
            char[] chars = new char[1024];
            while ((len=isr.read(chars))!=-1){
                System.out.println(chars);
            }
            isr.close();
            FileReader fr=new FileReader("C:\\Users\\余生\\Desktop\\a.txt", Charset.forName("gbk"));
    //        FileOutputStream fos=new FileOutputStream(new File("C:\\Users\\余生\\Desktop\\a.txt"),Charset.forName("gbk"));
            int len1;
            char[] chars1 = new char[1024];
            while ((len1=fr.read(chars1))!=-1){
                System.out.println(chars1);
            }
            fr.close();
        }
    }
    

3.对象操作流

3.1对象流的基本特点

1.为什么要使用对象流?

在开发中,经常需要将对象的信息保存到磁盘中,如果使用前面所学的知识来实现,会非常的繁琐。使用对象流就非常的方便

2.对象流的基本特点?

对象操作流可以将对象以字节的形式写到本地文件中,直接打开是看不懂的,需要时可以再次用对象操作流读到内存中

3.2对象操作流-序列化

1.什么是序列化?

序列化就是将对象转换为字节流,以便存储到特点存储介质(例如磁盘)的过程

2.什么是反序列化?

反序列化就是将字节流,转换为对象的过程

3.对象操作输出流

(对象序列化流):

ObjectOutputStream:就是将对象保存到磁盘中,或者在网络中传输

对象对象操作输入流

(对象反序列化流)

ObjectInputStream:把写到本地文件中的对象读到内存中,或者接收网络中传输的对象

import java.io.*;

public class Demo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //序列化
        User user=new User("张三","123");
        ObjectOutputStream sso=new ObjectOutputStream(new FileOutputStream("C:\\Users\\余生\\Desktop\\a.txt"));
        sso.writeObject(user);
        sso.close();
        //反序列化
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("C:\\Users\\余生\\Desktop\\a.txt"));
        User o = (User) ois.readObject();
        System.out.println(o.getUsername());
        System.out.println(o.getPassword());
       ois.close();
    }
}

3.3对象操作流-两个注意点

1.serialVersionUID

  • 用对象序列化流序列化了一个对象后,假如我们修改了对象所属的类文件,读取数据会不会出问题呢?
    • 会出问题,会抛出InvalidClassException异常
  • 如果出问题了,如何解决呢?
    • 重新序列化
    • 给对象所属的类加一个serialVersionUID
      • private static final long serialVersionUID = 42L;

2.transient[?tr?nzi?nt]

如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?

  • 给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程**

4.Properties集合

4.1 Properties -概述

  • 是一个Map体系的集合类

  • Properties可以保存到流中(store方法)从流中加载(load方法)

  • 一般只存字符串

4.2Properties作为Map集合的使用

? 特有方法

方法名 说明
Object setProperty(String key, String value) 设置集合的键和值,都是String类型,底层调用 Hashtable方法 put
String getProperty(String key) 使用此属性列表中指定的键搜索属性
Set stringPropertyNames() 从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
import java.util.Properties;
import java.util.Set;

public class PropertiesDemo2 {
    public static void main(String[] args) {
        Properties prop = new Properties();
        prop.setProperty("江苏","南京");
        prop.setProperty("安徽","南京");
        prop.setProperty("山东","济南");
        Set<Object> keySet = prop.keySet();
        for (Object o : keySet) {
            Object o1 = prop.get(o);
            System.out.println(o+" "+o1);
        }
        System.out.println("=====");
        Set<String> keys = prop.stringPropertyNames();
        for (String key : keys) {
            String value = prop.getProperty(key);
            System.out.println(key+" "+value);
        }
    }
}

4.3Properties-load

方法名 说明
void load(Reader reader) 将字符输入流中的数据加载到Properties对象中
public class LoadDemo {
    public static void main(String[] args) throws IOException {
        Properties prop = new Properties();
        FileReader fr = new FileReader("prop.properties");
        prop.load(fr);
        fr.close();
        System.out.println(prop);
    }
}

4.4Properties-store

方法名 说明
void store(Writer writer, String comments) 将Properties集合中的数据存入字符输出流
public class StoreDemo {
    public static void main(String[] args) throws IOException {
        Properties prop=new Properties();
        prop.put("zhangsan","123");
        prop.put("lisi","456");
        prop.put("wangwu","789");
        FileWriter fw = new FileWriter("prop.properties");
        prop.store(fw,null);
        fw.close();
    }
}

Io流

原文:https://www.cnblogs.com/zhangmeng0726/p/14623323.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!