Java输入输出(IO)流总结

    |     2015年4月3日   |   输入输出(IO)操作   |     0 条评论   |    1758

一、IO流的三种分类方式

[java]1.按流的方向分为:输入流和输出流
2.按流的数据单位不同分为:字节流和字符流
3.按流的功能不同分为:节点流和处理流[/java]

二、IO流的四大抽象类:

[java]字符流:Reader Writer
字节流:InputStream(读数据) OutputStream(写数据)[/java]

三、InputStream的基本方法

[java]int read() throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾
void close() throws IOException 关闭流释放内存资源
long skip(long n) throws IOException 跳过n个字节不读[/java]

四、OutputStream的基本方法

[java]void write(int b) throws IOException 向输出流写入一个字节数据
void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地[/java]

五、Writer的基本方法

[java]void write(int c) throws IOException 向输出流写入一个字符数据
void write(String str) throws IOException将一个字符串中的字符写入到输出流
void write(String str,int offset,int length)
将一个字符串从offset开始的length个字符写入到输出流
void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地[/java]

六、Reader的基本方法

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

七、节点流类型

[java]八、访问文件之FileInputStream和FileOutputStream继承基类用于向文件中输入输出字节
九、访问文件之FileReader和FileWriter继承基类用于向文件中输入输出字符[/java]

—-输出流在构造函数第二个参数可以设置true意义为跟在已有文件后进行输入—-此类流会抛出FileNotFoundException需要对其进行显示捕捉

十、缓冲流:

缓冲流要套接在相应的节点流之上,提高了读写的效率。
此处理流的构造方法都得传相对应的基类类型
[java]BufferedReader:提供了readLine方法用于高校读取一行字符串
BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行
BufferedInputStream 没多大用处
BufferedOutputStream 没多大用处[/java]

十一、转换流:

主要作用将字节流转换成字符流。用处较大!
转换流在构造时可以指定其编码集合
[java]InputStreamReader需要和InputStream套接
OutputStreamWriter需要和OutputStream套接
例:OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream(文件路径);
方法例:osw.getEncoding(); 获得流的编码方式[/java]

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

数据流主要为实现可以存取Java原始数据类型如long,boolean
数据流是字节流
[java]DataInputStream需要和InputStream套接
DataOutputStream需要和OutputStream套接

DataInputStream方法:
readBoolean()
readInt()
read……()……
readUTF():网络传输常用方法 读一个Unicode字符串

DataOutputStream方法与DataInputStream基本对应为写的方法
//此构造函数等于已可以往一个字节数组里输入内容
ByteArrayOutputStream baos = new ByteArrayOutputStream ();
//此方法为获取一个字节数组方法返回字节数组
baos.toByteArray();
//此方法获取字节数组占了多少字节
new ByteArrayInputStream(一个字节数组)。
available()[/java]

[java] ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baos);
    try {
      dos.writeDouble(Math.random());
      dos.writeBoolean(true);
      ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
      System.out.println(bais.available());
      DataInputStream dis = new DataInputStream(bais);
      System.out.println(dis.readDouble());
      System.out.println(dis.readBoolean());
      dos.close(); 
dis.close();
    } catch (IOException e) {
      e.printStackTrace();
    }[/java]

十三、Print流

Print流只有输出流无输入流,PrintWriter和PrintStream分别针对字符字节
两个类提供了重载的Print和Println方法用于多种数据类型的输出
[java]PrintWriter和PrintStream的输出操作不会抛出异常
PrintWriter和PrintStream有自动flush功能
—-System.setOut(接收OutputStream类):用于设置系统默认输出流[/java]

十四、Object流

等同于c#序列化,用直接将Object写入或读出
transient关键字为不序列化此成员变量
需要序列化的类必须实现Serializable接口
主要方法:writeObject(Object); readObject();
读出为Object类型需要强转数据类型

[java]import java.io.*;

public class TestObjectIO {
     public static void main(String args[]) throws Exception {
         T t = new T();
         t.k = 8;
         FileOutputStream fos = new FileOutputStream("d:/share/java/io/testobjectio.dat");
         ObjectOutputStream oos = new ObjectOutputStream(fos);
         oos.writeObject(t);
        oos.flush();
        oos.close();

         FileInputStream fis = new FileInputStream("d:/share/java/io/testobjectio.dat");
         ObjectInputStream ois = new ObjectInputStream(fis);
         T tReaded = (T)ois.readObject();
         System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);

     }
}

class T implements Serializable
{
     int i = 10;
     int j = 9;
     double d = 2.3;
     transient int k = 15;
}[/java]

转载请注明来源:Java输入输出(IO)流总结
本文链接地址:https://ai.zhousir.top/?p=143
回复 取消