zoukankan      html  css  js  c++  java
  • java IO复习笔记

    1. IO是什么?

        Input Output 

        Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

    2. 为什么使用Java IO?

        

    3. JAVA IO与JAVA NIO有什么不同?

        详见:

    4. 骨架

        

        File 类 :File对象可用来获取或处理与磁盘文件相关的信息,如:权限,时间,日期和目录路径

    5. JAVA IO 怎么用?

        1. 读数据的逻辑为:

            open a stream

            while more information

            read information

            close the stream

        2. 写数据的逻辑为:

            open a stream

            while more information

            write information

            close the stream

        File :

        1). File类的构造方法:

              File(String directoryPath)

              File(String directoryPath, String filename)

              File(File dirObj, String filename)

        2). 目录操作常用方法:

              public boolean mkdir() 根据抽象路径名创建目录 。

              public boolean mkdirs() 根据抽象路径名创建多层目录 。

              public String[] list() 返回抽象路径名表示路径中的文件名和目录名 。

              public File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

              boolean exists()   

              boolean isFile()

              boolean isDirectory()

    6. 使用注意事项

        1). IO流类的构造方法决定是输入流还是输出流。输入流连接一个文件,它会将文件中的内容读到流里面,read方法是将流里面的内容往外读。输出流连接一个文件,它的write方法,是将内存中的内容,写入到输出流中,

              然后再写到文件中。

        2). 输出不一定非要输出到文件中,也可以输出到内存中,如:ByteArrayOutputStream。输入流的read方法是从流里面读出来数据,输出流的write方法时将内存中的数据写入到流中,方便输出出去。

        3). 输入/输出是相对于程序来说的。程序在使用数据时所扮演的角色有两个:一个是源,一个是目的。若程序是数据流的源,即数据的提供者,这个数据流对程序来说就是一个"输出数据流"(数据从程序流出)。若程序是数据

             流的终点,这个数据流对程序而言就是一个“输入数据流” ( 数据从程序外流向程序)

        4). Java的I/O库提供了一个称做链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。这种机制实际上是一种被称为Decorator(装饰)设计模式的应用。

        5). 当你对文件的操作结束后,需要调用close( )来关闭文件 

        6). FileOutputStream的创建不依赖于文件是否存在。在创建对象时FileOutputStream在打开输出文件之前创建它。这种情况下你试图打开一个只读文件,会引发一个IOException异常 

        7). 如果read()方法返回-1,意味着程序已经读到了流的末尾,此时流内已经没有多余的数据可供读取了。-1是一个int类型,不是byte或者char类型,这是不一样的。当达到流末尾时,你就可以关闭流了。

        8). ByteArrayInputStream和ByteArrayOutputStream:

              a. writeTo(OutputStream out) :将此字节数组输出流的全部内容写入到指定的输出流参数中

                  reset():将此字节数组输出流的count字段重置为零,从而丢弃输出流中目前已累积的所有输出。通过重新使用已分配的缓冲区空间,可以再次使用该输出流

              b. toByteArray():

                  toString() : 将流中的内容转换为字符串

         9). 字节流的编码规范与具体的平台有关,可以在构造流对象时指定规范,也可以使用当前平台的缺省规范

         10). InputStreamReader和OutputStreamWriter是java.io包中用于处理字符流的基本类,用来在字节流和字符流之间搭一座“桥”。

                 public InputSteamReader(InputSteam in,String enc)

                 public OutputStreamWriter(OutputStream out,String enc)

         11). FileReader和FileWriter:FileWriter类的创建不依赖于文件存在与否。在创建文件之前,FileWriter将在创建对象时打开它来作为输出。如果你试图打开一个只读文件,将引发一个IOException异常

         12). ObjectInput 接口继承DataInput接口。它支持对象序列化。特别注意 readObject( )方法,它叫反序列化对象。所有这些方法在出错情况下引发IOException 异常

         13). Reader的read()方法返回一个字符,意味着这个返回值的范围在0到65535之间(当达到流末尾时,同样返回-1)。这并不意味着Reade只会从数据源中一次读取2个字节,Reader会根据文本的编码,

                一次读取一个或者多个字节。

         14). try(FileInputStream input = new FileInputStream("file.txt")) {} 防止异常未正常关闭

         15). RandomAccessFile file = new RandomAccessFile("c:\data\file.txt", "rw");

         16). 当你创建了一个指向已存在文件的FileOutputStream,你可以选择覆盖整个文件,或者在文件末尾追加内容。通过使用不同的构造函数可以实现不同的目的。

         17). 如果你希望类能够序列化和反序列化,必须实现Serializable接口。

    7. 优化

        1). void flush() :刷新输出流,强制缓冲区中的输出字节被写出。

        2). 若处理的数据量较多,为避免每个字节的读写都对流进行,可以使用过滤流类的子类缓冲流。缓冲流建立一个内部缓冲区,输入输出数据先读写到缓冲区中进行操作,这样可以提高文件流的操作效率 

        3). BufferedInputStream(InputStream inputStream, int bufSize)

        4). 一次性读取一个字节数组的方式,比一次性读取一个字节的方式快的多,所以,尽可能使用这两个方法代替read()方法。

    8. 监控

    为什么只有第一个read方法是抽象的,而其余两个read方法都是具体的?

    因为第二个read方法依靠第三个read方法来实现,而第三个read方法又依靠第一个read方法来实现,所以说只有第一个read方法是与具体的I/O设备相关的,它需要InputStream的子类来实现。

  • 相关阅读:
    Nbimer族助手 部分控件不能用的解决方法(转)
    jquery中通过全局变量来禁止多次ajax请求
    Three.JS 从世界坐标系转换到屏幕坐标系
    php 判断是手机版还是电脑端
    6个html5页面适配iphone6的技巧
    http://stackoverflow.com/questions/6065169/requestanimationframe-with-this-keyword
    javascript模仿php 函数 trim ltrim rtrim (原创)
    JavaScript中Trim(),TrimStart(),TrimEnd()的实现
    如何定位摄像机,使物体在屏幕上始终具有相同的像素宽度和高度?(threes)
    鸿基台式机安装
  • 原文地址:https://www.cnblogs.com/Jtianlin/p/5195158.html
Copyright © 2011-2022 走看看