欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JavaI/O操作

在我們?nèi)粘5拈_發(fā)中使用最多的Java知識點(diǎn)就是Java的IO流和Java集合兩大模塊,后續(xù)的文章我會接著介紹Java集合的知識,本篇博文我主要講解Java的輸入流和輸出流。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)科爾沁右翼中免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

我們知道任何的編程語言,首先要解決的就是如何與外部介質(zhì)交換數(shù)據(jù),這就包括了如何將數(shù)據(jù)寫到外部介質(zhì)以及如何讀取外部介質(zhì)的數(shù)據(jù);Java的I/O流提供了讀寫數(shù)據(jù)的標(biāo)準(zhǔn)方法,Java所有的I/O機(jī)制都是基于數(shù)據(jù)流進(jìn)行輸入輸出,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動序列。

Java的I/O流按讀寫方式可以分為字節(jié)流和字符流兩種類型;其實(shí)字符流的本質(zhì)還是字節(jié)流,只不過字符流對字節(jié)流做了一次封裝。需要注意的是:當(dāng)我們讀寫二進(jìn)制文件時(如:圖片、視頻、音頻等),只能使用字節(jié)流,否則會操作失敗。

按照讀寫介質(zhì)的不同,對于I/O流我們還有另一種劃分方法,分別是面向顯示器、鍵盤的操作、面向內(nèi)存的操作、面向磁盤的操作以及面向網(wǎng)絡(luò)的操作。

輸入流、輸出流中的輸入和輸出均是相對于Java程序來說,輸入即是向程序輸入數(shù)據(jù)(讀),輸出即是程序向外部輸出數(shù)據(jù)(寫)。

I/O流的相關(guān)類如下圖所示:

Java I/O操作

結(jié)合我自身開發(fā)的經(jīng)驗(yàn),我認(rèn)為按照讀寫介質(zhì)來講解理解會更加直觀,所以下面我會按照不同的讀寫介質(zhì)來講解I/O流。

1、面向顯示器、鍵盤的讀寫操作(標(biāo)準(zhǔn)輸入、輸出)

面向顯示器的寫操作和面向鍵盤的讀操作,就是我們常用的System.out和System.in;使用System.out可以向我們的顯示器輸出信息,使用System.in可以從我們的鍵盤獲取信息,示例代碼如下:

/**
 * 標(biāo)準(zhǔn)輸入輸出
 */
public class SystemIOTest {

    public static void main(String[] args) throws Exception{
        System.out.println("請輸入姓名:");
        Scanner scanner = new Scanner(System.in);
        System.out.println(scanner.nextLine());
    }
}

2、面向磁盤的讀寫操作

面向磁盤的讀寫操作,主要就是指對文件的讀寫操作,它主要包括FileInputStream、FileOutputStream、FileReader、FileWriter,示例代碼如下:

/**
 * java io 測試類
 */
public class JavaIOTest {

    /**
     * 字節(jié)流讀取二進(jìn)制文件(如圖片、音樂文件)
     */
    @Test
    public void inputstreamPicTest() {
        try {
            InputStream inputStream = new FileInputStream("e:" + File.separator + "logo.png");
            OutputStream outputStream = new FileOutputStream("e:" + File.separator + "copy.png");
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, len);
            }

            inputStream.close();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 字節(jié)流讀取文本
     */
    @Test
    public void inputStreamTxt() {
        try {
            InputStream inputStream = new FileInputStream("e:" + File.separator + "sql.txt");
            OutputStream outputStream = new FileOutputStream("e:" + File.separator + "copy.txt");
            byte[] chars = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(chars)) != -1) {
                outputStream.write(chars, 0, len);
                outputStream.flush();
            }

            inputStream.close();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 字符流讀取文本
     * 字符流直接讀取文本時,中文可能會亂碼,所以通過InputStreamReader建字節(jié)流轉(zhuǎn)換為字符流
     */
    @Test
    public void inputReaderTxt() {
        try {
            InputStreamReader reader = new InputStreamReader(new FileInputStream("e:" + File.separator + "sql.txt"), "GBK");
            Writer writer = new FileWriter("e:" + File.separator + "copy.txt");
            int len = 0;
            char[] chars = new char[1024];
            while ((len = reader.read(chars)) != -1) {
                writer.write(chars, 0, len);
                writer.flush();
            }

            reader.close();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 通過字符串的方式讀取文本(可以提高效率)
     */
    @Test
    public void stringTxt() {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("e:" + File.separator + "sql.txt"),"GBK");
            BufferedReader reader = new BufferedReader(inputStreamReader);
            String str = "";
            while ((str = reader.readLine()) != null) {
                System.out.println("==" + str);
            }

            inputStreamReader.close();
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3、面向內(nèi)存的讀寫操作

面向內(nèi)存的讀寫操作,主要用于中間數(shù)據(jù)的緩存,主要包括:ByteArrayInputStream、ByteArrayOutputStream、ObjecInputStream、ObjectOutputStream,示例代碼如下:

/**
 * java io 測試類
 */
public class JavaIOTest {

    /**
     * 對象流(可用于對象的序列化和反序列化)
     * 僅測試使用,Java原生的序列化和反序列化效率較低,建議使用Hession
     * 對象序列化至文件
     */
    @Test
    public void testObjectInputstream() {
        try {
            File file = new File("e:" + File.separator + "seri.txt");
            if(!file.exists()) {
                file.createNewFile();
            }

            ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("e:" + File.separator + "seri.txt"));
            SeriEntity seriEntity = new SeriEntity("hello world");
            outputStream.writeObject(seriEntity);
            outputStream.close();
            outputStream.flush();

            ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("e:" + File.separator + "seri.txt"));
            SeriEntity obj = (SeriEntity) inputStream.readObject();

            inputStream.close();

            System.out.println("========" + obj.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 對象流(可用于對象的序列化和反序列化)
     * 對象序列化至內(nèi)存
     */
    @Test
    public void  testObjectInputStreamByte() {
        try {
            SeriEntity seriEntity = new SeriEntity("name name");
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ObjectOutputStream outputStream = new ObjectOutputStream(byteArrayOutputStream);
            outputStream.writeObject(seriEntity);
            outputStream.flush();

            ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()));
            SeriEntity entity = (SeriEntity) inputStream.readObject();
            inputStream.close();

            System.out.println("======" + entity.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4、面向網(wǎng)絡(luò)的的操作

面向網(wǎng)絡(luò)的操作即Java的網(wǎng)絡(luò)編程,主要包括Socket、ServerSocket,示例代碼如下:

/**
 * java 網(wǎng)絡(luò)編程--客戶端
 */
public class NetClient {

    /**
     * 服務(wù)端IP地址
     */
    private static final String SERVERADDR = "127.0.0.1";

    /**
     * 服務(wù)端提供的端口號
     */
    private static final int SERVERPORT = 9090;

    public static void main(String[] args) {
        Socket socket = null;

        try {
            // 和服務(wù)端建立連接
            socket = new Socket(SERVERADDR, SERVERPORT);
            System.out.println("==========客戶端已啟動==============");

            // 向服務(wù)端發(fā)送數(shù)據(jù)
            String data = "java網(wǎng)絡(luò)編程實(shí)例程序";

            // 獲取網(wǎng)絡(luò)輸出流
            OutputStream outputStream = socket.getOutputStream();
            // 向網(wǎng)絡(luò)輸出流寫入數(shù)據(jù)(即向服務(wù)端發(fā)送數(shù)據(jù))
            outputStream.write(data.getBytes());
            outputStream.flush();

            //寫關(guān)閉,不然會一直阻塞著,服務(wù)器會認(rèn)為客戶端還一直在寫數(shù)據(jù)
            //由于從客戶端發(fā)送的消息長度是任意的,客戶端需要關(guān)閉連接以通知服務(wù)器消息發(fā)送完畢,如果客戶端在發(fā)送完最后一個字節(jié)后
            //關(guān)閉輸出流,此時服務(wù)端將知道"我已經(jīng)讀到了客戶端發(fā)送過來的數(shù)據(jù)的末尾了,即-1",就會讀取出數(shù)據(jù)并關(guān)閉服務(wù)端的讀數(shù)據(jù)流,在之后就可以
            //自己(服務(wù)端)的輸出流了,往客戶端寫數(shù)據(jù)了
            socket.shutdownOutput();

            // 接收服務(wù)端數(shù)據(jù)
            InputStream inputStream = socket.getInputStream();
            byte[] bytes = new byte[1024];
            int len = 1;
            while ((len = inputStream.read(bytes)) != -1) {
                System.out.println(new String(bytes, "UTF-8"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

/**
 * java網(wǎng)絡(luò)編程 -- 服務(wù)端
 */
public class NetServer {

    /**
     * 服務(wù)端提供的端口
     */
    private static final int SERVERPORT = 9090;

    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(SERVERPORT);
            System.out.println("===========服務(wù)端已啟動===========");

            while (true) {
                // 接收客戶端請求
                Socket socket = serverSocket.accept();

                // 接收客戶端發(fā)送的信息
                InputStream inputStream = socket.getInputStream();
                byte[] bytes = new byte[1024];
                int len = 1;
                System.out.println("客戶端發(fā)送消息:");
                while ((len = inputStream.read(bytes)) != -1) {
                    System.out.println(new String(bytes, "UTF-8"));
                }

                String data = "服務(wù)端已收到消息";
                System.out.println(data);
                OutputStream outputStream = socket.getOutputStream();
                outputStream.write(data.getBytes());
                outputStream.flush();

                //寫關(guān)閉,不然會一直阻塞著,服務(wù)器會認(rèn)為客戶端還一直在寫數(shù)據(jù)
                //由于從客戶端發(fā)送的消息長度是任意的,客戶端需要關(guān)閉連接以通知服務(wù)器消息發(fā)送完畢,如果客戶端在發(fā)送完最后一個字節(jié)后
                //關(guān)閉輸出流,此時服務(wù)端將知道"我已經(jīng)讀到了客戶端發(fā)送過來的數(shù)據(jù)的末尾了,即-1",就會讀取出數(shù)據(jù)并關(guān)閉服務(wù)端的讀數(shù)據(jù)流,在之后就可以
                //自己(服務(wù)端)的輸出流了,往客戶端寫數(shù)據(jù)了
                socket.shutdownOutput();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

由于篇幅有限文章中的代碼無法一一列出,如需獲取全部的源碼信息,可關(guān)注微信公眾號 布衣暖,回復(fù) java基礎(chǔ) 獲取全部的源碼信息

Java I/O操作

分享題目:JavaI/O操作
本文地址:http://aaarwkj.com/article14/gdihge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站導(dǎo)航、外貿(mào)建站、做網(wǎng)站、自適應(yīng)網(wǎng)站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
亚洲欧美国产另类综合| 日韩 高清 一区二区| 尤物天堂av一区二区| 爽妇网亚洲一区二区三区| 亚洲精品av一区二区久久| 青青草原高清在线观看| 十八禁网站免费在线播放| 韩国专区福利一区二区| 天天色天天色天天色综合网| 亚洲熟妇av乱码在线观看| 人妻少妇偷人精品免费看| 日本高清av一区二区| 欧美在线免费一级黄片| 丝袜啪啪啪麻豆白虎内射| 99热只有这里才有精品| 丝袜美腿精尽福利视频网址大全| 亚洲av产在线精品亚洲第| 五月开心婷婷开心五月活动推荐| 亚洲中文字幕伦理在线| 欧美黄色一级在线免费观看| 2021久久国产综合精品青草| 亚洲精品麻豆一区二区| 国产亚洲中文字幕无线乱码 | 日本不卡视频二区三区| 亚洲福利一区福利三区| 国产精品美女丝袜久久久| 亚洲国产高清国产拍精品| 91亚洲蜜桃内射后入在线观看 | 午夜精品久久久免费视频| 国产成人精品高清国产三级| 中文字幕乱码亚州精品一区| 91欧美激情另类亚洲| 国产精品国产一级国产av| 精品女厕一区二区三区| 日韩高清有码一区二区| 国产一区二区三区av在线播放| 国产国产精品国产自在午夜| 羞羞的视频免费观看在线| 欧美激情亚洲一区二区| 亚洲av日韩综合一区尤物| av中文字幕亚洲一区二区|