Java中三種檔案流寫入字串的方法__Java

來源:互聯網
上載者:User

     一.DataOutputStream類提供了如下3種寫入字串的方法:

   1.writeByte(String s);

   2.writeChars(String s);

   3.writeUTF(String s);


   二.三種方法的穩定性

   其中,前兩種方法主要用於操作基礎資料型別 (Elementary Data Type)位元組(Byte)和字元(Char)的寫入,而第三種主要用於操作字串(String)的讀取。由於Java中的字元是Unicode編碼的,是雙位元組的。

   writeBytes只會將字串中的每一字元的低位元組內容寫入目標裝置中,所以會存在遺失資料的可能性。如果你寫的是"a"這個String,當它取出'a'這個字元後,強轉為Byte,由於字元'a'完全可以用一個位元組表示,所以沒有遺失資料。但如果你寫的是這個String包含中文,比如"你"(由於中文是用兩個位元組編碼的),當它取出'你'這個字元後,強轉為byte,由於字元'你'必須用2個位元組才能表示,所以遺失資料。

   writeChars方法也是依次取出每一個字元,分別寫入底層的流中。因為每個字元佔2個位元組,所以對於每一個字元,也必須連續寫入2個位元組才能完整的表示。使用writeChars寫入String不會造成資料的丟失,但是如果想取出寫入的String,則必須要知道原String的長度,通過控制連續讀取的位元組數來讀取。

   writeUTF將字元申按照UTF編碼後的位元組長度寫入目標裝置,然後才是每一個位元組的UTF編碼,不存在遺失資料的風險,而且只有writeUTF方法向目標裝置中寫入字串的長度,所以也能準確地讀回寫入字元申。


   三.使用例子

import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;public class Test {public static void main(String[] args) {try {       FileOutputStream fs=new FileOutputStream("D:/test.txt");       DataOutputStream ds=new DataOutputStream(fs);                       //writeUTF可以直接寫入資料,不會遺失資料                       ds.writeUTF("使用writeUTF()方法寫入資料;");                       //writeChars首先要寫入String的長度,不會遺失資料                       String s=new String("使用writeChars()方法寫入資料;");                       ds.writeInt(s.length());ds.writeChars(s);                       //writeChars首先要寫入String的長度,會遺失資料                       String s1=new String("使用writeBytes()方法寫入資料;");                       ds.writeInt(s1.length());                       ds.writeBytes(s1);ds.close();                       FileInputStream fis=new FileInputStream("D:/test.txt");                       DataInputStream dis=new DataInputStream(fis);                       System.out.println(dis.readUTF());//從流中直接讀取writeUTF寫入的資料                       int len=dis.readInt();//先從流中讀取wirteChars寫入的資料長度,才能知道要完整讀取資料                       for(int i=0;i<len;++i)                             System.out.println(dis.readChar());                       int len1=dis.readInt();//先從流中讀取wirteBytes寫入的資料長度,才能知道要完整讀取資料,資料失真                       for(int i=0;i<len1;++i)                             System.out.print(dis.readByte()+" ");                       }catch (Exception e){                            e.printStackTrace();                       }           }}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.