<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 1,  comments - 25,  trackbacks - 0




    對于我們常用的GBK中,英文是占用1個字節,中文是2個

      對于UTF-8,英文是1個,中文是3個

      對于Unicode,英文中文都是2個

      Java的流操作分為字節流和字符流兩種。

    2.3 Java 中相關實現方法

    字符串類 String 中的內容是 UNICODE 字符串:

    // Java 代碼,直接寫中文
    String
     string = "中文123";

    // 得到長度為 5,因為是 5 個字符
    System.out.println(string.length());

    字符串 I/O 操作,字符與字節轉換操作。在 Java 包 java.io.* 中,以“Stream”結尾的類一般是用來操作“字節串”的類,以“Reader”,“Writer”結尾的類一般是用來操作“字符串”的類。

    // 字符串與字節串間相互轉化

    // 按照 GB2312 得到字節(得到多字節字符串)

    byte
     [] bytes = string.getBytes("GB2312");

    // 從字節按照 GB2312 得到 UNICODE 字符串
    string = new String(bytes, "GB2312");

    // 要將 String 按照某種編碼寫入文本文件,有兩種方法:

    // 第一種辦法:用 Stream 類寫入已經按照指定編碼轉化好的字節串

    OutputStream os = new FileOutputStream("1.txt");
    os.write(bytes);
    os.close();

    // 第二種辦法:構造指定編碼的 Writer 來寫入字符串
    Writer ow = new OutputStreamWriter(new FileOutputStream("2.txt"), "GB2312");
    ow.write(string);
    ow.close();

    /* 最后得到的 1.txt 和 2.txt 都是 7 個字節 */

    如果 java 的源程序編碼與當前默認 ANSI 編碼不符,則在編譯的時候,需要指明一下源程序的編碼。比如:

    E:\>javac -encoding BIG5 Hello.java

    以上需要注意區分源程序的編碼與 I/O 操作的編碼,前者是在編譯時起作用,后者是在運行時起作用。

    IO分兩種流 

    字節流 InputStream OutputStream 

    字符流 Reader Writer 

    他們都是抽象類 

    具體實現 
    字節流 FileInputStream FileOutputStream 
    字符流 FileReader FileWriter  

           字符流處理的單元為2個字節的Unicode字符,分別操作字符、字符數組或字符串,而字節流處理單元為1個字節, 操作字節和字節數組。所以字符流是由Java虛擬機將字節轉化為2個字節的Unicode字符為單位的字符而成的,所以它對多國語言支持性比較好!如果是 音頻文件、圖片、歌曲,就用字節流好點,如果是關系到中文(文本)的,用字符流好點. 
         所有文件的儲存是都是字節(byte)的儲存,在磁盤上保留的并不是文件的字符而是先把字符編碼成字節,再儲存這些字節到磁盤。在讀取文件(特別是文本文件)時,也是一個字節一個字節地讀取以形成字節序列. 
          字節流可用于任何類型的對象,包括二進制對象,而字符流只能處理字符或者字符串; 2. 字節流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字符,而字符流就可以。 


    字節流轉換成字符流可以用 InputSteamReader OutputStreamWriter 

    轉換成BufferdReader BufferedWriter 他們具有緩沖區 

    例如:讀取文件 從字節流輸入到字符流輸入 
    定義一個字節流: 
    FileInputStream fileInputStream = new FileInputStream("d:/text.txt"); // 定義一個指 

    向D:/TEXT.TXT 的字節流 

    InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); 
    //字節流轉換成InputStreamReader 
    BufferedReader bufferedReader = new BufferedReader(inputSteamReader); 
    //InputStreamReader 轉換成帶緩存的bufferedReader 

    可以把讀出來的內容賦值給字符 

    String ss = new String(); 
    String s; 
    while((s = bufferedReader.readLine())!=null){ 
    ss += s; 


    例如:寫入文件 從字節流輸出到字符流輸出 

    FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt"); //定義一個 

    指向D:/TEXT.TXT文件 

    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); 

    BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); 

    bufferedWriter.write(s); 

    bufferedWriter.close(); 
    outputStreamWriter.close(); 
    fileOutputStream.close(); 


    例程: 
         將字符串轉化為字節流#region 將字符串轉化為字節流 
            /**//// <summary> 
            /// 將字符串轉化為字節流 
            /// </summary> 
            /// <param name="_Source">字串</param> 
            /// <returns>字節流</returns> 
            public static byte[] String2Bytes(string strSource) 
            { 
                System.IO.MemoryStream   memoryStream=new   System.IO.MemoryStream();   
                System.IO.BinaryWriter   binaryWriter=new   System.IO.BinaryWriter(memoryStream);   
                binaryWriter.Write( strSource ); 
                byte[]   buffer=memoryStream.GetBuffer(); 
                return buffer;    
            } 
            #endregion 

            
            將字節流轉化為字符串#region 將字節流轉化為字符串 
            /**//// <summary> 
            /// 將字節流轉化為字符串 
            /// </summary> 
            /// <param name="bytData">字節流</param> 
            /// <returns>字串</returns> 
            public static string Bytes2String(byte[] bytData) 
            { 
                //字節流->字符串   
                System.IO.MemoryStream   memoryStream2 = new   System.IO.MemoryStream(bytData);   
                System.IO.BinaryReader   binaryReader = new   System.IO.BinaryReader(memoryStream2);   
                string   s2=binaryReader.ReadString();   
                return s2; 
            } 
            #endregion
    posted on 2010-08-16 17:16 Daniel 閱讀(1787) 評論(1)  編輯  收藏 所屬分類: CoreJava

    FeedBack:
    # re: Java的字符流和字節流
    2011-12-23 20:39 | mlzry0612
    留下備忘!
    文件拷貝:
    Java代碼
    public static void copyFile(File src,File dest) throws Exception{
    try {
    // Create channel on the source
    FileChannel srcChannel = new FileInputStream(src).getChannel();

    // Create channel on the destination
    FileChannel dstChannel = new FileOutputStream(dest).getChannel();

    // Copy file contents from source to destination
    dstChannel.transferFrom(srcChannel, 0, srcChannel.size());

    // Close the channels
    srcChannel.close();
    dstChannel.close();
    } catch (IOException e) {
    }

    }

    文件重命名:
    Java代碼
    public static renameFile(File src,String newFilename)throws Exception{
    src.renameTo(new File(newFilename));//請寫明完整路徑
    }

    將文件讀成字符串:
    Java代碼
    public static String ReadFileToString(String pathAndFilename) {
    StringBuffer str = new StringBuffer();
    BufferedReader in = null;
    File inputFile = null;
    try {
    inputFile = new File(pathAndFilename);
    in = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile), "utf-8"));
    String line = null;
    str = new StringBuffer((int) inputFile.length());
    while ((line = in.readLine()) != null) {
    str.append(line);
    }
    in.close();
    }
    catch (FileNotFoundException e2) {
    try {
    if (!new File(inputFile.getParent()).exists())
    new File(inputFile.getParent()).mkdirs();
    inputFile.createNewFile();
    }
    catch (IOException e) {
    e.printStackTrace();
    }
    }
    catch (IOException e3) {
    e3.printStackTrace();
    }
    return str.toString();
    }   回復  更多評論
      
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 18禁成人网站免费观看| 国产午夜影视大全免费观看 | 亚洲国产韩国一区二区| 手机看黄av免费网址| 亚洲av无码专区在线观看亚| 深夜国产福利99亚洲视频| 91成人免费观看在线观看| 亚洲av成人综合网| 亚洲国产精品13p| 最近免费中文字幕大全高清大全1| 精品久久久久久亚洲精品| 亚洲国产精品人人做人人爽| 日韩免费无码视频一区二区三区 | 免费在线观看黄网站| 免费91最新地址永久入口| 亚洲日韩精品无码专区加勒比| 国产亚洲色婷婷久久99精品91| 青娱乐免费视频在线观看| 污污视频免费观看网站| 亚洲精品第一国产综合精品 | 国产成人亚洲综合网站不卡| 亚洲午夜精品第一区二区8050| 在线精品一卡乱码免费| 又粗又长又爽又长黄免费视频| 亚洲国产精品综合久久2007| 久久精品国产精品亚洲人人 | 亚洲欧洲精品国产区| 亚洲无码视频在线| 国产免费av片在线看| 国产拍拍拍无码视频免费| 国产成人亚洲综合a∨| 亚洲一级在线观看| 久久久无码精品亚洲日韩蜜桃 | 日韩高清免费在线观看| 99视频免费观看| 成人免费乱码大片A毛片| 久久无码av亚洲精品色午夜| 日产亚洲一区二区三区| 在线观看亚洲av每日更新| 国产成人3p视频免费观看 | 亚洲AV无码不卡无码|