畢向東_Java基礎視頻教程第19天_IO流(11~12),_java_io

來源:互聯網
上載者:User

畢向東_Java基礎視頻教程第19天_IO流(11~12),_java_io
第19天-11-IO流(位元組流File讀寫操作)

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*字元流Reader/WriterFileReader/FileWriterBufferedReader/BufferedWriter位元組流:InputStream/OutputStreamFileInputStream/FileOutputStream需求:想要操作圖片資料,這時就要用到位元組流*/public class FileStream {    public static void main(String[] args) throws IOException {        // writeFile();        readFile_2();    }    public static void writeFile() throws IOException {        FileOutputStream fos = new FileOutputStream("fos.txt");        fos.write("abc厲害".getBytes());        // 寫需要close無需flush -- 字元流底層也是一個位元組一個位元組進行操作,但是需要讀取若干個位元組,然後查碼錶輸出字元,所以涉及緩衝和flush.而位元組流就不需要緩衝也就無需flush        fos.close();    }    public static void readFile_0() throws IOException {        FileInputStream fis = new FileInputStream("fos.txt");        // 一個位元組一個位元組讀        int ch;        while ((ch = fis.read()) != -1) {            System.out.println((char) ch);        }        fis.close();    }    public static void readFile_1() throws IOException {        FileInputStream fis = new FileInputStream("fos.txt");        byte[] buf = new byte[1024];// 1024*N 是位元組數組合適的大小        int len;        while ((len = fis.read(buf)) != -1) {            System.out.println(new String(buf, 0, len, "utf-8"));            System.out.println(new String(buf, 0, len));        }        fis.close();    }    // 位元組流特有的available()方法    public static void readFile_2() throws IOException {        FileInputStream fis = new FileInputStream("fos.txt");        // int available() 返回下一次對此輸入資料流調用的方法"可以不受阻塞地從'此輸入資料流'讀取(或跳過)的估計剩餘位元組數"(含分行符號)        // 如果new一個容量大小恰好為剩餘檔案位元組數的byte[fis.available()],就無需迴圈而一次讀完.但檔案體積很大的情況下byte[]申請記憶體會失敗        byte[] buf = new byte[fis.available()];        fis.read(buf);        System.out.println(new String(buf));        fis.close();    }}
第19天-12-IO流(拷貝圖片)
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*拷貝一個圖片,思路:1.用位元組讀取流對象和源圖片關聯2.用位元組寫入流對象建立一個圖片檔案,用於儲存擷取到的圖片資料.3.通過迴圈讀寫,完成資料的儲存4.關閉資源 */public class CopyPic {    public static void main(String[] args) {        FileOutputStream fos = null;        FileInputStream fis = null;        try {            fos = new FileOutputStream("2.png");            fis = new FileInputStream("1.png");            byte[] buf = new byte[1024];            int len;            while ((len = fis.read(buf)) != -1) {                fos.write(buf, 0, len);            }        } catch (Exception e) {            throw new RuntimeException("複製檔案失敗");        } finally {            try {                if (fis != null) fis.close();            } catch (IOException e) {                throw new RuntimeException("讀取流關閉失敗");            }            try {                if (fos != null) fos.close();            } catch (IOException e) {                throw new RuntimeException("輸出資料流關閉失敗");            }        }    }}

Q:字元流可以用於圖片複製嗎?

A:不可以,字元流讀到的資料,如果在碼錶裡找不到對應的數,則返回一個未知字元對應的數字,未知字元佔一個位元組。同理,位元組流如果錯誤地截斷字元,也會導致亂碼。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.