• IO流(四)


    1:数据操作流(操作基本类型数据的流)(理解)

    (1)数据操作流:

      可以读写基本类型的数据。
    (2)流对象名称

     数据输流:DataInputStream
           DataInputStream(InputStream in)
     数据输流:DataOutputStream
           DataOutputStream(OutputStream out)

     

    2:内存操作流(理解)
    (1)内存操作流:

      用于处理临时存储信息的,程序结束,数据就从内存中消失。

    (2)以下:

     字节数组:
       ByteArrayInputStream
       ByteArrayOutputStream
     字符数组:
       CharArrayReader
       CharArrayWriter
     字符串:
       StringReader
       StringWriter

     

    注意:释放资源
       通过查看源码我们知道这里什么都没做,所以根本不需要close()。

     

    3:打印流(掌握)
    (1)打印流:

      字节打印流---PrintStream

      字符打印流---PrintWriter
    (2)特点:
      1:只有写数据的,没有读取数据。只操作目的地,不操作数据源。
      2:可以操作任意类型的数据。
      3:如果启用了自动刷新(构造方法中第二参数为true,即开启自动刷新)。

       在调用println()方法的时候,能够换行并刷新

      println() --->
        其实等价于于:
       {   bw.write();

          bw.newLine();
          bw.flush();   }

      4:可以直接操作文件
      问题:哪些流可以直接操作文件呢?

    • FileInputStream
    • FileOutputStream
    • FileReader
    • FileWriter
    • PrintStream
    • PrintWriter

    看API,如果其构造方法能够同时接收File和String类型的参数,一般都是可以直接操作文件的。

    流:
     基本流:就是能够直接读写文件的。
     高级流:在基本流基础上提供了一些其他的功能。


    (3)复制文本文件

        BufferedReader br = new BufferedReader(new FileReader("a.txt"));
        PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);
    
            String line = null;
        while((line=br.readLine())!=null) {
            pw.println(line);
        }
    
        pw.close();
        br.close();


    4:标准输入输出流(理解)
    (1)输入输出流:

     System类下面有这样的两个字段

      in 标准输入流

      out 标准输出流

    System类中的两个成员变量:
       public static final InputStream in    “标准”输入流。
       public static final PrintStream out   “标准”输出流。

     InputStream is = System.in;
     PrintStream ps = System.out;

    (2)三种键盘录入方式
      1:main方法的args接收参数
      2:System.in通过字符缓冲流包装标准输入流实现
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      3:Scanner
        Scanner sc = new Scanner(System.in);
    (3)输出语句的原理和如何使用字符流输出数据
     A:原理

    System.out.println("helloworld");
    PrintStream ps = System.out;
    ps.println("helloworld");

      B:把System.out用字符缓冲流包装一下使用

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    5:随机访问流(理解)
    (1)随机访问流:

      可以按照文件指针的位置写数据和读数据

      RandomAccessFile类不属于流是Object类的子类
      但它融合了InputStream和OutputStream的功能。
      支持对文件的随机访问读取和写入

    (2)特点:

    public RandomAccessFile(String name,String mode):第一个参数是文件路径,第二个参数是操作文件的模式。
      模式有四种,我们最常用的一种叫"rw",这种方式表示我既可以写数据,也可以读取数据。

    6:合并流(理解)
    (1)合并流:

      把多个输入流的数据写到一个输出流中。
    (2)构造方法:
      A:SequenceInputStream(InputStream s1, InputStream s2)
      B:SequenceInputStream(Enumeration<? extends InputStream> e)

    7:序列化流(理解)
    (1)序列化流:

      可以把对象写入文本文件或者在网络中传输

    序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输。          对象 -- 流数据(ObjectOutputStream)
    反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象。   流数据 -- 对象(ObjectInputStream)


    (2)如何实现序列化呢?
      让被序列化的对象所属类实现序列化接口。
      该接口是一个标记接口。没有功能需要实现。
    (3)注意问题:
      把数据写到文件后,在去修改类会产生一个问题。
    如何解决该问题呢?
      在类文件中,给出一个固定的序列化id值。
      而且,这样也可以解决黄色警告线问题。
    (4)面试题:

    • 什么时候序列化?
    • 如何实现序列化?
    • 什么是反序列化?

     

    transient关键字:被标记的属性不能被序列化。

     

    8:Properties(理解)
    (1)Properties

      1.Properties:属性集合类。是一个可以和IO流相结合使用的集合类
      2.Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

      3.是Hashtable的子类,说明是一个Map集合。

    (2)特有功能

    A:public Object setProperty(String key,String value)添加元素
    B:public String getProperty(String key)获取元素
    C:public Set<String> stringPropertyNames()获取所有的键的集合

    (3)和IO流结合的方法

     

    //把键值对形式的文本文件内容加载到集合中
    public void load(Reader reader)
    public void load(InputStream inStream)
    
    //把集合中的数据存储到文本文件中
    public void store(Writer writer,String comments)
    public void store(OutputStream out,String comments)

     

    (4)案例:
    A:根据给定的文件判断是否有键为"lisi"的,如果有就修改其值为100
    B:写一个程序实现控制猜数字小游戏程序不能玩超过5次

    9:NIO(了解)
    (1)New IO:

    JDK4出现的NIO,对以前的IO操作进行了优化,提供了效率。但是大部分我们看到的还是以前的IO

    (2)JDK7的NIO的使用
    Path:路径
    Paths:通过静态方法返回一个路径
    Files:提供了常见的功能
      复制文本文件
      把集合中的数据写到文本文件

  • 相关阅读:
    request.setCharacterEncoding("utf-8");
    JSTL的foreach循环遍历
    EL表达式的查找范围
    Unity_图形学之_shader_学习笔记(一)
    Unity_AssetBundle笔记_(一)(俗称AB包_个人笔记欢迎指正)
    Unity C#笔记 协程详解(转)
    解决方案_And_学习链接_笔记
    Unity_一些Unity内部的重要设置
    C#_异常处理
    Unity3D_Resources封装(ResourcesManager 类)
  • 原文地址:https://www.cnblogs.com/crazypokerk/p/9102290.html
Copyright © 2020-2023  润新知