DataInputStream与DataOutputStream类
DataInputStream與DataOutputStream類
·?? DataOutputStream類提供三個寫入字符串的方法:
?? --? public final void writeBytes(String s)? //由于JAVA的字符編碼是Unicode的,第個字符占兩個字節,writeBytes方法只是將每個字符的低字節寫入到目標設備中
?? --? public final void writeChars(String s)?//writeChars是將字符的兩個字節都寫入到目標設備中
?? --? public final void writeUTF(String str)?//writeUTF將字符串按照UTF編碼寫入到目標設備(其中包括長度)
·?? 為什么DataInputStream類中有一個readUTF方法,而沒有"readBytes"和"readChars"方法呢?
·?? 編程實例:分別使用DataOutputStream類的writeUTF,writeBytes和writeChars方法,比較這幾個方法的差異。程序中所使用的流棧如下:
·?? 關閉流棧中的最上層的流對象(DataInputStream,DataOutputStream),將會自動關閉流棧中的所有底層流對象。
//DataStreamTest.java
?
import java.io.*;public class DataStreamTest{public static void main(String[] args) throws Exception {FileOutputStream fos = new FileOutputStream("count.txt");BufferedOutputStream bos = new BufferedOutputStream(fos);DataOutputStream dos = new DataOutputStream(bos);dos.writeUTF("ab中國");dos.writeBytes("ab中國");dos.writeChars("ab中國");dos.close();//只要關閉最上層流對象,下層的流對象也會關閉FileInputStream fis = new FileInputStream("count.txt");BufferedInputStream bis = new BufferedInputStream(fis);DataInputStream dis = new DataInputStream(bis);System.out.pritnln(dos.readUTF());dis.close();}}?
PrintStream類
·?? PrintStream類提供了一系列的print和println方法,可以將基本數據類型的數據格式化成字符串輸出。
·?? 格式化輸出是什么意思?例如:97被格式化輸出的實際字節數據為0X39和0X37。
·?? PrintStream的3個構造函數:
??? --? PrintStream(OutputStream out)
??? --??PrintStream(OutputStream out,boolean autoflush)
??? --? PrintStream(OutputStream out,boolean autoflush,String encoding)
·?? 與PrintStream對應的PrintWriter類,即使遇到了文本換行標識符(\n),PrintWriter類也不會自動清空緩沖區。
·?? PrintWriter的println方法能根據操作系統的不同而生成相應的文本換行標識符。在Windows下的文本換行符是“\r\n“,而Linux下的文本換行標識符是“\n“。
ObjectInputStream與ObjectOutputStream類
·?? ObjectInputStream和ObjectOutputStream這兩個包裝類,用于從底層輸入流中讀取對象類型的數據和將對象類型的數據寫入到底層輸出流。
·?? ObjectInputStream與ObjectOutputStream類所讀寫的對象必須實現了Seralizable接口。對象中的transient和static類型的成員變量不會被讀取和寫入。
·?? 一個可以被序列化的MyClass類的定義:
?
編程舉例:創建了一個可序列化學生對象,并用ObjectOutputStream類把它存儲到一個文件(mytext.txt)中,然后再用ObjectInputStream類把存儲的數據讀了到一個學生對象中,即恢復保存的學生對象。
?
//Student.java
?
import java.io.Serializable;class Student implements Serializable{int id;String name;int age;String department;public Student(int id,String name,int age,String department){this.id = id;this.name = name;this.age = age;this.department = department;}}?
//Serialization.java?啟動類
?
import java.io.*;public class Serialization{public static void main(String[] args) throws Exception {Student stu1 = new Student(19,"zhangsan",25,"hauxue");Student stu2 = new Student(20,"lisi",23,"wuli");FileOutputStream fos = new FileOutputStream("student.txt");ObjectOutputStream os = new ObjectOutputStream(fos);os.writeObject(stu1);os.writeObject(stu2);os.close();FileInputStream fis = new FileInputStream("student.txt");ObjectInputStream ois = new ObjectInputStream(fis);stu1 = (Student)ois.readObject();stu2 = (Student)ois.readObject();ois.close();System.out.println("id:" + stu1.id);System.out.println("name:" + stu1.name);System.out.println("age:" + stu1.age);System.out.println("age:" + stu1.department);System.out.println("id:" + stu2.id);System.out.println("name:" + stu2.name);System.out.println("age:" + stu2.age);System.out.println("age:" + stu2.department);}}
字節流與字符流的轉換
·?? 能不能找到一種簡單的方式來讀取鍵盤上輸入的一行字符,如何找?
·?? InputStreamReader和OutputStreamWriter,是用于將字節流轉換成字節流來讀寫的兩個類,InputStreamWriter可以將一個字節流中的字節解碼成字符后讀取,OutputStreamWriter將字符編碼成字節后寫入到一個字節流中。
·?? InputStreamReader的兩個主要的構造函數:
?? --? InputStreamReader(InputStream in)
?? --? InputStreamReader(InputStream in,String CharsetName)
·?? OutputStreamWriter的兩個主要的構造函數:
?? --? OutputStreamWriter(OutputStream out)
?? --? OutputStreamWriter(OutputStream out,String CharsetName)
總結
以上是生活随笔為你收集整理的DataInputStream与DataOutputStream类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xp和win 2003远程桌面强制进入命
- 下一篇: html 设置 下拉列表 不可用