关于Java IO流学习总结

来源:互联网 发布:unity3d 全景图 编辑:程序博客网 时间:2024/06/05 09:57

一、IO流的三种分类方式

    1.按流的方向分为:输入流和输出流

    2.按流的数据单位不同分为:字节流和字符流

    3.按流的功能不同分为:节点流和处理流

    二、IO流的四大抽象类:

    字符流:Reader Writer

    字节流:InputStream(读数据)

    OutputStream(写数据)

    三、InputStream的基本方法

    int read() throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾

    void close() throws IOException 关闭流释放内存资源

    long skiplong n throws IOException 跳过n个字节不读

    四、OutputStream的基本方法

    void writeint b throws IOException 向输出流写入一个字节数据

    void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地

    五、Writer的基本方法

    void writeint c throws IOException 向输出流写入一个字符数据

    void writeString str throws IOException将一个字符串中的字符写入到输出流

    void writeString strint offsetint length

    将一个字符串从offset开始的length个字符写入到输出流

    void flush() throws IOException

    将输出流中缓冲的数据全部写出到目的地

    六、Reader的基本方法

    int read() throws IOException 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾

    七、节点流类型

    八、访问文件之FileInputStreamFileOutputStream继承基类用于向文件中输入输出字节

    九、访问文件之FileReaderFileWriter继承基类用于向文件中输入输出字符

----输出流在构造函数第二个参数可以设置true意义为跟在已有文件后进行输入
----
此类流会抛出FileNotFoundException需要对其进行显示捕捉
十、缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。

    此处理流的构造方法都得传相对应的基类类型

    BufferedReader:提供了readLine方法用于高校读取一行字符串

    BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行

    BufferedInputStream 没多大用处

    BufferedOutputStream 没多大用处

    十一、转换流:主要作用将字节流转换成字符流。用处较大!

    转换流在构造时可以指定其编码集合

    InputStreamReader需要和InputStream套接

    OutputStreamWriter需要和OutputStream套接

    例:OutputStreamWriter osw = new OutputStreamWriter new FileOutputStream(文件路径);

    方法例:osw.getEncoding(); 获得流的编码方式

    十二、数据流与字节数组流:

    数据流主要为实现可以存取Java原始数据类型如longboolean

    数据流是字节流

    DataInputStream需要和InputStream套接

    DataOutputStream需要和OutputStream套接

    DataInputStream方法:readBoolean() readInt() read……()……

    readUTF():网络传输常用方法 读一个Unicode字符串

    DataOutputStream方法与DataInputStream基本对应为写的方法

    //此构造函数等于已可以往一个字节数组里输入内容

    ByteArrayOutputStream baos = newByteArrayOutputStream ();

    //此方法为获取一个字节数组方法返回字节数组

    baos.toByteArray();

    //此方法获取字节数组占了多少字节

    new ByteArrayInputStream(一个字节数组)。available()

 1ByteArrayOutputStream baos =
 2                        new ByteArrayOutputStream();
 3   DataOutputStream dos =
 4                        new DataOutputStream(baos);
 5    try{
 6      dos.writeDouble(Math.random());
 7      dos.writeBoolean(true);
 8      ByteArrayInputStream bais =
 9          newByteArrayInputStream(baos.toByteArray());
10
      System.out.println(bais.available());
11
      DataInputStream dis = newDataInputStream(bais);
12
      System.out.println(dis.readDouble());
13
      System.out.println(dis.readBoolean());
14
      dos.close();  dis.close();
15
    } catch (IOException e) {
16
      e.printStackTrace();   }
    十二、Print

    Print流只有输出流无输入流,PrintWriterPrintStream分别针对字符字节

    两个类提供了重载的PrintPrintln方法用于多种数据类型的输出

    PrintWriterPrintStream的输出操作不会抛出异常

    PrintWriterPrintStream有自动flush功能

    ----System.setOut(接收OutputStream):用于设置系统默认输出流

    十二、Object

    等同于c#序列化,用直接将Object写入或读出

    transient关键字为不序列化此成员变量

    需要序列化的类必须实现Serializable接口

    主要方法:writeObjectObject);readObject();

    读出为Object类型需要强转数据类型

 1 import java.io.*;
 2
 3 public class TestObjectIO {
 4    public static void main(String args[]) throws Exception {
 5         T t = new T();
 6         t.k = 8;
 7         FileOutputStream fos = newFileOutputStream("d:/share/java/io/testobjectio.dat");
 8         ObjectOutputStream oos = newObjectOutputStream(fos);
 9         oos.writeObject(t);
10
         oos.flush();
11
         oos.close();
12
        
13
         FileInputStream fis = newFileInputStream("d:/share/java/io/testobjectio.dat");
14
         ObjectInputStream ois = newObjectInputStream(fis);
15
         T tReaded = (T)ois.readObject();
16
         System.out.println(tReaded.i + "" + tReaded.j + " " + tReaded.d + " " + tReaded.k);
17
        
18
     }
19 }
20
21 class T
22
     implements Serializable
23 {
24
     int i = 10;
25
     int j = 9;
26
     double d = 2.3;
27
     transient int k = 15; }

转自  http://www.sunxin.org/article/616.html

原创粉丝点击