1. 程式人生 > >黑馬程序猿——26,基本數據操作流,字節數組操作流,轉換流,編碼表

黑馬程序猿——26,基本數據操作流,字節數組操作流,轉換流,編碼表

inpu ascii ref 程序猿 har 科學 標準 name 字符數

-----------android培訓java培訓、java學習型技術博客、期待與您交流!

------------

黑馬程序猿——26,

DataInputStream,DataOutputStream,

ByteArrayInputStream,ByteArrayOutputStream,

InputStreamReader,OutputStreamWriter,編碼表

/*

DataInputStream和DataOutputStream

能夠更加操作基本數據類型的流

註意這裏是Data不是Date!

*/

 
import java.io.*;
class  Ioliou31
{
         public  static void  main(String[] args)throws  IOException
         {
          UTFDemo() ;      
         //  method(); 
         }
         public  static void  method()  throws IOException
         {
           File  f=new   File("f:\\科學.txt");  //封裝目的文件為對象
           FileOutputStream     fos=new  FileOutputStream(f);//關聯目的文件的流
           DataOutputStream     dos=new  DataOutputStream(fos);
           //再用專門操作基本類型數據的流的構造函數接收
 
           //下面註意寫入的格式
           //不同的寫入格式是依照不同位數寫入的
           dos.writeInt(56);
           dos.writeBoolean(false);
           dos.writeDouble(15.24);
     /*  */
           FileInputStream    fis=new  FileInputStream(f);
          DataInputStream  dis=new   DataInputStream (fis);      
           //讀取的時候註意要依照順序讀取,以及讀取的格式
           //不同的讀取格式是依照不同的位數來讀取的
           int    i   =dis.readInt();
           boolean  bo=dis.readBoolean();
           double   dou=dis.readDouble();
           soc(i+"---"+bo+"---"+dou);
           //特別註意:什麽格式寫入的就用什麽格式讀取出來
 
           dos.close();
           dis.close();             
         }
         public   static void  UTFDemo()  throws IOException
         {
           File   f=new   File("f:\\科學.txt");  //封裝目的文件為對象
 
 
           FileOutputStream     fos=new  FileOutputStream(f);//關聯目的文件的流
           DataOutputStream     dos=new  DataOutputStream(fos);
 
           dos.writeUTF("這是");//四個字節組成一個字符,一共八個字節
          
           FileInputStream    fis=new  FileInputStream(f);
           DataInputStream  dis=new   DataInputStream (fis);
           soc(dis.readUTF());
           //readUTF方法返回的是字符串。用什麽格式寫就要用什麽格式讀取
         }
         public  static void  soc(Object  obj)
         {
              System.out.println(obj);           
         }
}

————————切割線————————

/*

操作字節數組的流(內部封裝長度可變的字節數組)

ByteArrayInputStream

ByteArrayOutputStream

直接把字節數組傳給其ByteArrayInputStream的構造函數,

傳進來的字節數組就是源

源設備:

鍵盤System.in 硬盤FileStream 內存ArrayStream

目的設備

控制臺System.out 硬盤FileStream 內存ArrayStream

這兩個流沒有調用底層資源,不用關閉close

另外,還有ByteArrayReader和ByteArrayWriter使用方法也是和上面兩者類似。

ByteArrayReader構造函數傳入的是字符數組。

*/

import java.io.*;
 
class  Ioliou32
{
         public   static void main(String[] args) throws IOException
         {
                   ByteArrayInputStream   bais=new   ByteArrayInputStream("哦奧額".getBytes());
                   ByteArrayOutputStream   baos=new  ByteArrayOutputStream();
                   int  i=0;
                  while((i=bais.read())!=-1)
                  {
                       baos.write(i);       
                   }
                   File   f=new  File("f:\\可樂可樂.java");
                   FileOutputStream    fos=new FileOutputStream(f);
                   baos.writeTo(fos);    //直接寫入字節輸出流中    
                  
 
         }
         public static void  soc(Object  obj)
         {
            System.out.println(obj);        
         }
}

——————切割線——————

/*

轉換流與編碼表:

轉換流InputStreamReader和OutputStreamWriter

編碼表:

ASCII美國標準信息交換碼,用一個字節的7位表示

ISO8859-1 歐洲碼表。拉丁碼表不識別中文字符,用一個字節8位表示

GB2312 中國中文編碼表

GBK 中國中文編碼表升級版,兩個字節表示一個字符

Unicode 國際標準碼,java使用的編碼表

UTF-8 最多三個字節表示一個字符

*/

import java.io.*;
class  Ioliou33
{
         publicstatic void main(String[] args) throws IOException
         {
       // write();
          read();               
         }
         public  static void  write()  throws IOException
         {
                   File   f=new  File("f:\\樓宇.txt");
                   FileOutputStream   fos=new  FileOutputStream(f);
                   OutputStreamWriter   osw=new  OutputStreamWriter(fos,"UTF-8");//要加上編碼表版本號
                   osw.write("動手打人了"); 
                   osw.close();
       /*
                   盡管寫入之後我們代開f:\\樓宇.java文件看到的依然是字符。
                   可是本質上文件存儲的是編碼表上相應的數字,僅僅只是依照指定編碼表兌換成字符而已。
                   */    
         }
         public  static void  read()  throws IOException
         {
                   File   f=new  File("f:\\樓宇.txt");
                   FileInputStream   fis=new FileInputStream(f);
                   InputStreamReader   isr=new InputStreamReader(fis,"UTF-8");//編碼表版本號要相應上
                   /*
                   讀取的時候也是依照存儲的數字再依照指定的編碼表找出相應的字符
                   */
                   char[]    ch=new  char[20];
                   int  i=0;
                      while ((i=isr.read(ch))!=-1)
                      {
                         soc(new  String(ch,0,i));       
                      }
     
                   isr.close();                      
         }
         public  static void  soc(Object  obj)
         {
             System.out.println(obj);    
         }
 
 
}

——————切割線——————

/*

編碼與解碼:

經常使用編碼表gbk,utf-8,ISO8859-1

*/

import java.io.*;
import java.util.*;
class  Ioliou34
 
{
         public  static void  main(String[] args)throws  Exception
         {
 
                 method2();
         }
         public  static void  method()  throws Exception
         {
                   String   s="開始遊戲";
                   byte[]  by=  s.getBytes("utf-8");//依照utf-8編碼表進行編碼
                   soc(Arrays.toString(by));
                   String     s2=new  String(by,"ISo8859-1");//依照ISo8859-1編碼表進行解碼
                  soc("s2="+s2);
                   //假設依照不同的編碼表進行解碼的話會導致錯誤結果
       //假設遇到這樣的情況就須要再一次進行編碼解碼
                   byte[]    by2=s2.getBytes("ISo8859-1");
                   String   s3=new String(by2,"utf-8");
                   soc("s3="+s3);                        
         }
         public  static void  method2()  throws Exception
         {
                   String   s="開始遊戲";
                   byte[]  by=  s.getBytes("utf-8");//依照utf-8編碼表進行編碼
                   soc(Arrays.toString(by));
                   String   s2=new String(by,"gbk");
                   soc("s2="+s2);
                   //假設依照不同的編碼表進行解碼的話會導致錯誤結果
       //假設遇到這樣的情況就須要再一次進行編碼解碼
                   byte[]    by2= s2.getBytes("gbk");
                   soc(Arrays.toString(by2));
                   String    s3=new String(by2,"utf-8");
                   soc("s3="+s3);
                   /*
                   由於gbk和utf-8都是中文編碼表,所以,此時的情況與method方法中的不同。
                   method方法中解碼過程出錯的是由於使用了IOS8895-1拉丁碼表,裏面不知別中文字符,
                   而這裏method2的情況則是解碼過程中使用了能夠識別中文的gbk碼表。
                   解碼中遇到對不上號的字符就會去gbk碼表的亂碼區查找,接著再用gbk碼表編碼就
                   不是原來的號嗎了,所以,這裏method2方法的s3就會顯示亂碼,而method方法的s3則是顯示正確。
 
 
       */
         }
         public  static void  soc(Object  obj)
         {
             System.out.println(obj);            
         }
}

-----------android培訓java培訓、java學習型技術博客、期待與您交流!

------------

黑馬程序猿——26,基本數據操作流,字節數組操作流,轉換流,編碼表