天天看點

Java : 資料流 InputStream 和 OutputStream

一、檔案 輸入輸出流 :FileInputStream 與  FileOutputStream

    1、FileInputStream、FileOutputStream 顧名思義 屬于檔案流,用于 檔案流操作。繼承 InputSream,outputSream,屬于InputSream,outputSream

    2、用法

//讀取一個字元
//                FileInputStream fileInputStream = new FileInputStream(file);
//                char byteChar = (char) fileInputStream.read();
//                System.out.print(byteChar);
//                fileInputStream.close();


                //讀取多個字元
//                FileInputStream fileInputStream2 = new FileInputStream(file);
//                byte[] bytes = new byte[2];
//                fileInputStream2.read(bytes);
//                String testString = new String(bytes);
//                System.out.print(testString);
//                fileInputStream2.close();

                //讀取多個字元優雅點的寫法
//                FileInputStream fileInputStream3 = new FileInputStream(file);
//                byte[] bytes = new byte[2];
//                int readNum = -1 ;
//
//                StringBuffer stringBuffer = new StringBuffer();
//                while ((readNum = fileInputStream3.read(bytes))!=-1){
//                    stringBuffer.append(new String(bytes,0,readNum));
//                }
//                PrintUtils.print(stringBuffer.toString());
//                fileInputStream3.close();


                //如果要每次讀取一行的話,用BufferInputReader ,使用readLine()方法



                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
                String data;
                while ((data = bufferedReader.readLine())!=null){
                    PrintUtils.print(data+"\n");
                }
                bufferedReader.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
           

上面是fileInputStream的一些用法,而FileOutputStream 的用法類似,如下

FileOutputStream fileOutputStream2 = new FileOutputStream(file);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream2));
writer.write(testString);
writer.flush();  //可以不用
fileOutputStream2.flush();
fileOutputStream2.close();
writer.close();
           

二、DataInputStream 與 DataInputStream 

   1、DataInputStream、DataInputStream  清單 BufferedWriter,BufferedReader, 但是屬于 InputStream、 outputSream,父類是,FilterOutputStream,我的了解,它們是InputStream、 outputSream 的裝飾,跟BufferedWriter,BufferedReader

的差別在,它提供了寫入除String,byte之外的資料類型的方法,而BufferedWriter,BufferedReader不行。

 2 、用法

FileOutputStream fileOutputStream = new FileOutputStream(file);
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
dataOutputStream.writeUTF("陳景坤");
dataOutputStream.writeInt(123);
byte[] b = new byte[2];
dataOutputStream.writeByte(b[0]);
dataOutputStream.writeByte(b[1]);
dataOutputStream.writeFloat(0.01f);
           

三、ObjectInputStream 和 ObejectOutStream 

  1、  DataInputStream、DataInputStream 等沒有提供寫入對象的方法,而ObjectInputStream、ObejectOutStream 更強大

,可以提供寫入對象的方法,寫入的類需要實作序列化。

   2、用法

public class TestUser  implements Serializable{
    private static final long serialVersionUID = -695100050333685920L;
    private int age ;
    private int money;
    private String name;

    public String getName() {
        return null == name ? "" : name;
    }

    public TestUser(String name,int age, int money) {
        this.age = age;
        this.money = money;
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public TestUser(int age, int money) {
        this.age = age;
        this.money = money;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getMoney() {
        return  money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
           

}

ObjectOutputStream測試:

File file = new File(Environment.getExternalStorageDirectory()+"/testdemo/test.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(new TestUser("陳景坤",21,1000000));
objectOutputStream.writeObject(new TestUser("陳景坤2",21,1000000));
objectOutputStream.flush();
objectOutputStream.close();
           
File ObjectInputStream測試:
file = new File(Environment.getExternalStorageDirectory()+"/testdemo/test.txt");
FileInputStream fileInputStream = new FileInputStream(file);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
TestUser user = (TestUser) objectInputStream.readObject();
TestUser user2 = (TestUser) objectInputStream.readObject();
PrintUtils.print(user.toString());
PrintUtils.print(user2.toString());
objectInputStream.close();