最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

帶你快速搞定java IO

 更新時間:2021年07月15日 10:48:05   作者:香菜聊游戲  
這篇文章主要介紹了Java IO流 文件傳輸基礎(chǔ)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下,希望能給你帶來幫助

一、IO底層是怎么回事?

操作系統(tǒng)就是管家,電腦的設(shè)備就是資源,如果進(jìn)程先要操作資源,必須要進(jìn)行系統(tǒng)調(diào)用,有操作系統(tǒng)去處理,然后再返回給進(jìn)程,這樣的代理模式是不是很常見?因此app 就是你寫的程序,資源就是硬盤或者其他的設(shè)備,io就是進(jìn)行的系統(tǒng)調(diào)用。

圖片

為了保證操作系統(tǒng)的穩(wěn)定性和安全性,一個進(jìn)程的地址空間劃分為 用戶空間(User space)內(nèi)核空間(Kernel space ) 。像我們平常運行的應(yīng)用程序都是運行在用戶空間,只有內(nèi)核空間才能進(jìn)行系統(tǒng)態(tài)級別的資源有關(guān)的操作,比如如文件管理、進(jìn)程通信、內(nèi)存管理等等。也就是說,我們想要進(jìn)行 IO 操作,一定是要依賴內(nèi)核空間的能力。并且,用戶空間的程序不能直接訪問內(nèi)核空間。當(dāng)想要執(zhí)行 IO 操作時,由于沒有執(zhí)行這些操作的權(quán)限,只能發(fā)起系統(tǒng)調(diào)用請求操作系統(tǒng)幫忙完成。因此,用戶進(jìn)程想要執(zhí)行 IO 操作的話,必須通過 系統(tǒng)調(diào)用 來間接訪問內(nèi)核空間

二、梳理類的結(jié)構(gòu)

java的io 實在太復(fù)雜了,往往新手很難掌握,因為只緣身在此山中,新手往往很難從全體去看到問題的本質(zhì),我和打鐵的朋友的聊天截圖能幫你解答一些。

圖片

類結(jié)構(gòu)如下

圖片

在平常的讀寫文件的時候可以先用基本流,然后看是否需要字符流,最后在用上帶buffer 的流。

IO流的設(shè)計思想就是裝飾器模式,一層一層的進(jìn)行升級功能。

三、IO類大點兵

圖片

四、來波實例展示

1、訪問操作文件(FileInputStream/FileReader ,F(xiàn)ileOutputStream/FileWriter)

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 拷貝文件
* @author 香菜
*/
public class CopyFileWithStream {
   public static void main(String[] args) {
       int b = 0;
       String inFilePath = "D:\\wechat\\A.txt";
       String outFilePath = "D:\\wechat\\B.txt";
       try (FileInputStream in = new FileInputStream(inFilePath); FileOutputStream out= new FileOutputStream(outFilePath)) {
           while ((b = in.read()) != -1) {
               out.write(b);
          }
      } catch (IOException e) {
           e.printStackTrace();
      }
       System.out.println("文件復(fù)制完成");
  }
}

2、緩存流的使用(BufferedInputStream/BufferedOutputStream,BufferedReader/BufferedWriter)

package org.pdool.iodoc;
import java.io.*;
/**
* 拷貝文件
*
* @author 香菜
*/
public class CopyFileWithBuffer {
   public static void main(String[] args) throws Exception {
       String inFilePath = "D:\\wechat\\A.txt";
       String outFilePath = "D:\\wechat\\B.txt";
       try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inFilePath));
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outFilePath))) {
           byte[] b = new byte[1024];
           int off = 0;
           while ((off = bis.read(b)) > 0) {
               bos.write(b, 0, off);
          }
      }
  }
}

3、獲取鍵盤輸入

import java.util.Scanner;
public class TestScanner {
   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       while (scanner.hasNextLine()){
           System.out.println(scanner.nextLine());
      }
  }
}

讓我們看下源碼是啥情況:

圖片

總結(jié):

而Reader/Writer則是用于操作字符,增加了字符編解碼等功能,適用于類似從文件中讀取或者寫入文本信息。本質(zhì)上計算機操作的都是字節(jié),不管是網(wǎng)絡(luò)通信還是文件讀取,Reader/Writer相當(dāng)于構(gòu)建了應(yīng)用邏輯和原始數(shù)據(jù)之間的橋梁。

Buffered等帶緩沖區(qū)的實現(xiàn),可以避免頻繁的磁盤讀寫,進(jìn)而提高IO處理效率。

記住IO流的設(shè)計模式是裝飾器模式,對流進(jìn)行功能升級。

stream,reader ,buffered 三個關(guān)鍵詞記住

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 使用spring+maven不同環(huán)境讀取配置方式

    使用spring+maven不同環(huán)境讀取配置方式

    這篇文章主要介紹了使用spring+maven不同環(huán)境讀取配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 使用idea開發(fā)javaWeb應(yīng)用程序的思路(實現(xiàn)用戶的增刪改查)

    使用idea開發(fā)javaWeb應(yīng)用程序的思路(實現(xiàn)用戶的增刪改查)

    這篇文章主要介紹了使用idea開發(fā)javaWeb應(yīng)用程序的思路(實現(xiàn)用戶的增刪改查),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 深入理解Java的接口與抽象類

    深入理解Java的接口與抽象類

    本文主要介紹java 的接口和抽象類,對接口和抽象類進(jìn)行介紹對比,深入理解,有需要的小伙伴可以參考下
    2016-07-07
  • 詳解Spring Boot微服務(wù)如何集成fescar解決分布式事務(wù)問題

    詳解Spring Boot微服務(wù)如何集成fescar解決分布式事務(wù)問題

    這篇文章主要介紹了詳解Spring Boot微服務(wù)如何集成fescar解決分布式事務(wù)問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Druid之連接創(chuàng)建及銷毀示例詳解

    Druid之連接創(chuàng)建及銷毀示例詳解

    這篇文章主要為大家介紹了Druid之連接創(chuàng)建及銷毀示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java外賣訂餐系統(tǒng)小項目

    java外賣訂餐系統(tǒng)小項目

    這篇文章主要為大家詳細(xì)介紹了java外賣訂餐系統(tǒng)小項目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java消息隊列RabbitMQ入門詳解

    Java消息隊列RabbitMQ入門詳解

    這篇文章主要介紹了Java消息隊列RabbitMQ入門詳解,RabbitMQ是使用Erlang語言開發(fā)的開源消息隊列系統(tǒng),基于AMQP協(xié)議 來實現(xiàn),AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布 /訂閱)、可靠性、安全,需要的朋友可以參考下
    2023-07-07
  • java實現(xiàn)圖片無損任意角度旋轉(zhuǎn)

    java實現(xiàn)圖片無損任意角度旋轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)圖片無損任意角度旋轉(zhuǎn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 解析Java異步之call future

    解析Java異步之call future

    當(dāng)調(diào)用一個函數(shù)的時候,如果這個函數(shù)的執(zhí)行過程是很耗時的,就必須要等待,但是有時候并不急著要這個函數(shù)返回的結(jié)果。因此,可以讓被調(diào)者立即返回,讓他在后臺慢慢處理這個請求。對于調(diào)用者來說,可以先處理一些其他事情,在真正需要數(shù)據(jù)的時候再去嘗試獲得需要的數(shù)據(jù)
    2021-06-06
  • 基于SpringBoot2的Shiro最簡配置操作(兩個文件)

    基于SpringBoot2的Shiro最簡配置操作(兩個文件)

    這篇文章主要介紹了基于SpringBoot2的Shiro最簡配置操作(兩個文件),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

灵寿县| 泰宁县| 高陵县| 温宿县| 开阳县| 枝江市| 林西县| 洪湖市| 长子县| 华阴市| 蒙自县| 大悟县| 根河市| 博野县| 汶川县| 嘉黎县| 长宁区| 滦南县| 永州市| 阿尔山市| 报价| 封丘县| 军事| 永川市| 太仆寺旗| 灵璧县| 来安县| 广宁县| 文化| 霍林郭勒市| 奉节县| 贡觉县| 曲阜市| 张掖市| 元江| 鄂伦春自治旗| 巫山县| 新龙县| 蓬溪县| 长岭县| 金湖县|