api進階Day3使用文件流對文件進行複製、使用塊讀寫一組位元組,使用byte數組提高讀寫的效率、返回當前時間。

来源:https://www.cnblogs.com/Bafanqwq/archive/2022/08/18/16599825.html
-Advertisement-
Play Games

使用文件流對文件進行複製: package io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExce ...


使用文件流對文件進行複製:

package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**

  • 使用文件流完成文件的複製操作
    /
    public class CopyDemo {
    public static void main(String[] args) throws IOException {
    // FileInputStream fis = new FileInputStream("image.jpg");
    // FileOutputStream fos = new FileOutputStream("image_cp.jpg");
    FileInputStream fis = new FileInputStream("01.rmvb");
    FileOutputStream fos = new FileOutputStream("01_cp.rmvb");
    /

    image.jpg文件內容
    11001100 00110011 11110000 00001111 10101010 01010101 ...

         第1次調用:d = fis.read();
         11001100 00110011 11110000 00001111 10101010 01010101 ...
         ^^^^^^^^
         讀取的位元組
         d的2進位:00000000 00000000 00000000 11001100
    
         fos.write(d);
         d:00000000 00000000 00000000 11001100
                                      ^^^^^^^^
                                      寫出的位元組
         image_cp.jpg文件數據:
         11001100
      */
     int d;//記錄每次讀取的位元組內容
     long start = System.currentTimeMillis();//獲取當前系統時間的毫秒值
     while(  (d = fis.read()) != -1    ) {//若讀取到了-1則應當停止迴圈,沒有讀取到-1則應當抄
         fos.write(d);
     }
     long end = System.currentTimeMillis();//獲取當前系統時間的毫秒值
    
     System.out.println("複製完畢,耗時:"+(end-start)+"ms");
     fos.close();
     fis.close();
    

    }
    }

使用塊讀寫一組位元組,使用byte數組提高讀寫的效率:

package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**

  • 提高每次讀寫的數據量減少實際讀寫的次數可以提高讀寫效率

  • 塊讀寫:一次讀寫一組位元組
    /
    public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
    FileInputStream fis = new FileInputStream("01.rmvb");
    FileOutputStream fos = new FileOutputStream("01_cp.rmvb");
    /

    java.io.InputStream超類上定義了塊讀位元組的操作:
    int read(byte[] data)
    一次性讀取給定位元組數組data總長度的位元組量並將讀取到的所有位元組存入到該數組中。
    返回值表達本次實際讀取的位元組數量。如果返回值為整數-1則表示讀取到了流的末尾。

         文件內容(6位元組):
         11001100 00110011 11110000 00001111 10101010 01010101
    
         byte[] data = new byte[4];//4位元組長的數組
         int len = 0;//記錄每次實際讀取的位元組數
    
         第一次調用len = fis.read(data);
         一次性嘗試從文件中讀取data數組長度的位元組量(本案例:4個位元組)
         11001100 00110011 11110000 00001111 10101010 01010101
         ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
         data:{11001100 00110011 11110000 00001111} 數組中存放的是本次讀取的4位元組內容
         len:4 這裡的4是表達本次實際讀取到了4個位元組
    
         第二次調用len = fis.read(data);
         一次性嘗試從文件中讀取data數組長度的位元組量(本案例:4個位元組)
         11001100 00110011 11110000 00001111 10101010 01010101 文件末尾
                                             ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
                                             本次實際僅讀取到了2個位元組
         data:{10101010 01010101 11110000 00001111}
               |--本次讀取的位元組--||---上次的舊數據---|
         len:2 本次實際僅讀取到了2個位元組
    
         第三次調用len = fis.read(data);
         11001100 00110011 11110000 00001111 10101010 01010101 文件末尾
                                                               ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
         data:{10101010 01010101 11110000 00001111}
               |--------沒有變化,都是舊數據--------|
         len:-1 表達文件末尾
    
    
         java.io.OutputStream超類上定義了塊寫操作
         void write(byte[] data)
         一次性將給定的位元組數組中所有的位元組寫出
    
         byte[] data:{10101010 01010101 11110000 00001111}
         fos.write(data)
         文件數據:
         10101010 01010101 11110000 00001111
    
    
         void write(byte[] data,int offset,int len)
         一次性將給定的位元組數組從下標offset處開始的連續len個位元組寫出
         byte[] data:{10101010 01010101 11110000 00001111}
                               ^^^^^^^^ ^^^^^^^^
         fos.write(data,1,2):將data數組中從下標1開始的連續2個位元組一次性寫出
    
         文件數據:
         01010101 11110000
    
      */
     //編譯後:byte[] data = new byte[10240];
     byte[] data = new byte[1024*10];//10kb
     int len = 0;//記錄每次實際讀取的位元組數
    
     long start = System.currentTimeMillis();
     while( (len = fis.read(data)) != -1  ){
         fos.write(data,0,len);
     }
     long end = System.currentTimeMillis();
     System.out.println("複製完畢,耗時"+(end-start)+"ms");
    
     fis.close();
     fos.close();
    

    }
    }

返回當前時間:

package io;

public class CurrentTimeDemo {
public static void main(String[] args) {
//返回的UTC時間,1970年1月1日 00:00:00到當前系統時間之間經過的毫秒
long ms = System.currentTimeMillis();
System.out.println(ms);
long max = Long.MAX_VALUE;
System.out.println("公元:"+(max/1000/60/60/24/365+1970));

}

}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Json格式在後臺服務中的重要性就不多說了,直入正題。首先引入pom文件,這裡使用的是1.2.83版本 1 <dependency> 2 <groupId>com.alibaba</groupId> 3 <artifactId>fastjson</artifactId> 4 <version>1.2 ...
  • 如題:使用三個線程交替列印ABC,直至100次代碼實戰 方法一: 使用notify()、wait()方法 public class PrintAbc { /** * 喚醒線程的狀態值 state: threadA = 0, threadB = 1, threadC =2, */ int state ...
  • 爬取 flbook 文檔 需求介紹 由於實習期間被主管委派了下載下來《安徽省助企政策彙編》的任務,去大概搜索瞭解了一下 flbook 網站,發現該網站並不提供已經發佈的文檔的下載渠道(感覺挺莫名其妙的,都公開允許觀看了,為什麼不給下載渠道啊,更何況還是個政府文件,發佈在這種網站上,總覺得哪裡有問題) ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 0. 標簽順序 Mybatis核心配置文件中有很多標簽,它們誰誰寫在前寫在後其實是:boom:有順序:boom:要求的: 從前到後: properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactor ...
  • 2.函數的遞歸的定義 函數的遞歸調用:是函數嵌套調用的一種特殊形式 具體是指:在調用一個函數的過程中又直接或者間接的調用到本身,是一個死迴圈,最大遞歸是1000次,超出之後報錯。 2.函數遞歸的調用 # 直接調本身 def f1(): print('是我還是我') f1() f1() # 間接調用 ...
  • 當我們拿到一個對象的引用時,如何知道這個對象是什麼類型、有哪些方法呢? 1.使用type() 首先,我們來判斷對象類型,使用type()函數: 基本類型都可以用type()判斷: >>> type(123) <class 'int'> >>> type('str') <class 'str'> >> ...
  • 1、先配置spring、springmvc通用xml文件的頭部信息 spring、springmvc通用xml文件的模板內容如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...