IO流

一、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 = new ByteArrayOutputStream ();

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

  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 new ByteArrayInputStream(baos.toByteArray());

  10 System.out.println(bais.available());

  11 DataInputStream dis = new DataInputStream(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();

  17 }

  十二、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 = new FileOutputStream("d:/share/java/io/testobjectio.dat");

  8 ObjectOutputStream oos = new ObjectOutputStream(fos);

  9 oos.writeObject(t);

  10 oos.flush();

  11 oos.close();

  12

  13 FileInputStream fis = new FileInputStream("d:/share/java/io/testobjectio.dat");

  14 ObjectInputStream ois = new ObjectInputStream(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;

  28 }

你可能感兴趣的:(exception,IO,object,String,dos,newline)