【java12】java12新特性之File的mismatch方法

Java12引入了一個新的方法 mismatch,它屬于java.nio.file.Files類。此方法用于比較兩個文件的內容,并返回第一個不匹配字節的位置。如果兩個文件完全相同,則返回-1

Files.mismatch 方法聲明

public static long mismatch(Path path1, Path path2) throws IOException

參數說明:

  • path1: 第一個文件的路徑。
  • path2: 第二個文件的路徑。

返回值說明:

  • 返回兩個文件之間第一個不匹配字節的位置。如果兩個文件完全相同,則返回 -1
  • 如果一個文件是另一個文件的前綴,則返回較短文件的長度。

異常說明:

  • IOException: 如果發生I/O錯誤,拋出IOException異常,例如文件不存在。

Files.mismatch的使用

以下是一個使用Files.mismatch方法的示例代碼:

package com.morris.java12;import java.io.FileWriter;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;/*** 使用FileMismatch對文件進行比較*/
public class FileMismatchDemo {public static void main(String[] args) throws IOException {FileWriter a1 = new FileWriter("d:/a1.txt");a1.write("abc中國");a1.write("efg");a1.write("123");a1.close();FileWriter a2 = new FileWriter("d:/a2.txt");a2.write("abc中國"); // 中文占3個字節a2.write("efg");a2.write("124");a2.close();long ap = Files.mismatch(Path.of("d:/a1.txt"), Path.of("d:/a2.txt"));System.out.println("a1 and a2 mismatch: " + ap); // 14FileWriter b1 = new FileWriter("d:/b1.txt");b1.write("abc");b1.close();FileWriter b2 = new FileWriter("d:/b2.txt");b2.write("abc");b2.close();long bp = Files.mismatch(Path.of("d:/b1.txt"), Path.of("d:/b2.txt"));System.out.println("b1 and b2 mismatch: " + bp); // -1}
}

運行結果如下:

a1 and a2 mismatch: 14
b1 and b2 mismatch: -1

如果文件內容相同,mismatch方法將返回-1

如果文件內容不同,mismatch方法將返回第一個不匹配字節的位置。

如果文件長度不同,如果一個文件是另一個文件的前綴,mismatch方法將返回較短文件的長度。

這個新方法對文件比較非常有用,可以大大簡化需要逐字節比較文件內容的代碼。

Files.mismatch的源碼分析

public static long mismatch(Path path, Path path2) throws IOException {if (isSameFile(path, path2)) {return -1;}byte[] buffer1 = new byte[BUFFER_SIZE];byte[] buffer2 = new byte[BUFFER_SIZE];try (InputStream in1 = Files.newInputStream(path);InputStream in2 = Files.newInputStream(path2)) {long totalRead = 0;while (true) {int nRead1 = in1.readNBytes(buffer1, 0, BUFFER_SIZE);int nRead2 = in2.readNBytes(buffer2, 0, BUFFER_SIZE);int i = Arrays.mismatch(buffer1, 0, nRead1, buffer2, 0, nRead2);if (i > -1) {return totalRead + i;}if (nRead1 < BUFFER_SIZE) {// we've reached the end of the files, but found no mismatchreturn -1;}totalRead += nRead1;}}
}

底層使用了Arrays.mismatch()比較兩個文件的字節數組。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36872.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【并發編程】2-Synchronized

基本概念 線程安全問題三個要素&#xff1a;多線程、共享資源、非原子性操作&#xff1b;產生的根本原因&#xff1a;多條線程同時對一個共享資源進行非原子性操作&#xff1b;Synchronized解決線程安全問題的方式&#xff1a;通過互斥鎖將多線程的并行執行變為單線程串行執行…

昇思25天學習打卡營第4天|數據集Dataset

數據集 Dataset 介紹 之前說過&#xff0c;MindSpore是基于Pipeline&#xff0c;通過Dataset和Transformer進行數據處理。Dataset在其中是用來加載原始數據的。mindSpore提供了數據集加載接口&#xff0c;可以加載文本、圖像、音頻等&#xff0c;同時也可以自定義加載接口。此…

【UE開發】游戲庫存UI系統Demo

1.項目介紹 1.描述&#xff1a;一種用于存儲記錄玩家物品的游戲內可視化操作系統。 2.演示&#xff1a;https://www.bilibili.com/video/BV1f53neVEfW/?vd_source50dea901fd12253f417c48b937975b0d 3.大綱&#xff1a; 4.樣式&#xff1a; 2.W_Inventory_Main_01&#xff08;…

CORE Mobility Errorr的調試

在運行CORE tutorial 3中的mobility示例時&#xff0c;出現如下錯誤&#xff1a; 當看到這個問題的時候&#xff0c;并沒有仔細去分析日志和現象&#xff0c;在core-daemon的進程打印界面只看了一下最后的出錯堆棧&#xff1a; 2024-06-27 10:43:48,614 - ERROR - _server:_ca…

MySQL8 新特性——公用表表達式用法 with t1 as (select * from user)

MySQL8 新特性——公用表表達式用法_mysql ctes-CSDN博客 1.普通公用表表達式 MySQL8 新特性——公用表表達式用法 在MySQL 8.0及更高版本中&#xff0c;引入了公用表表達式&#xff08;Common Table Expressions&#xff0c;CTEs&#xff09;&#xff0c;它是一種方便且可重…

docker部署vue項目

1.下載docker desktop軟件 Docker Desktop啟動的時候&#xff0c;有可能彈框提示"WSL2 installations is incomplete"&#xff0c;這是您的系統中沒有安裝WSL2內核的原因&#xff0c;打開【https://aka.ms/wsl2kernel ,在打開的頁面中有一個Linux內核更新包"鏈…

【python011】經緯度點位可視化html生成(有效方案)

1.熟悉、梳理、總結項目研發實戰中的Python開發日常使用中的問題、知識點等&#xff0c;如獲取省市等邊界區域經緯度進行可視化&#xff0c;從而輔助判斷、決策。 2.歡迎點贊、關注、批評、指正&#xff0c;互三走起來&#xff0c;小手動起來&#xff01; 3.歡迎點贊、關注、批…

Android InputReader 輸入事件處理流程

Android系統輸入事件產生的底層主要是輸入子系統&#xff0c;Android 中的輸入設備有很多&#xff0c;例如屏幕&#xff0c;鼠標&#xff0c;鍵盤等都是輸入設備&#xff0c;對于應用開發者&#xff0c;接觸最多的也就是屏幕了。 1. 當輸入設備可用時&#xff0c;Linux會在 /de…

tensorRT的安裝

在這個網址找到適合自己的版本&#xff0c;尤其是找到合適的cuda版本&#xff1a; https://pypi.nvidia.com/ 然后直接pip 安裝&#xff1a; 比如&#xff1a; pip install https://pypi.nvidia.com/tensorrt-cu11/tensorrt-cu11-10.1.0.tar.gz 也可以&#xff1a; wget http…

【MotionCap】SLAHMR 在 Colab 的demo運行筆記

【MotionCap】SLAHMR slahmr將人類和相機運動與野外視頻分離 CVPR 2023跳至主要內容 SLAHMR (supports 4D Humans).ipynb SLAHMR (supports 4D Humans).ipynb_筆記本已移除星標Google Colab demo for: SLAHMR - Simultaneous Localization And Human Mesh Recovery @inproc…

STM32將外部SDRAM空間作為系統堆(Heap)空間

概述 stm32可以外擴很大的sram&#xff0c;常見外部sram的初始化函數一般是c語言寫的&#xff0c;默認寫在main函數里面。stm32初始化首先進入匯編代碼startup_stm32f429xx.s&#xff0c;在匯編代碼中Reset_Handler&#xff08;復位中斷服務程序&#xff09;里面先調用了Syste…

線上書店訂購系統小組作業匯總

1、數據庫模型圖、er圖1、數據庫模型圖、er圖-CSDN博客 2、網上圖書訂購2、網上圖書訂購-CSDN博客 3、簡單查詢與多表聯合復雜查詢MySQL周內訓參照3、簡單查詢與多表聯合復雜查詢-CSDN博客 4、觸發器-插入-修改-刪除MySQL周內訓參照4、觸發器-插入-修改-刪除-CSDN博客 5、存…

亮相夏季達沃斯論壇天津之夜,國窖1573展現國際化新表達

執筆 | 姜 姜 編輯 | 揚 靈 6月25日-27日&#xff0c;以“未來增長的新前沿”為主題的第十五屆新領軍者年會&#xff0c;即2024年夏季達沃斯論壇盛大舉行。26日晚&#xff0c;在2024年夏季達沃斯論壇天津之夜上&#xff0c;國窖1573作為中國民族品牌的代表&#xff0c;以唯一攜…

vue + Lodop 制作可視化設計頁面 實現打印設計功能(二)

歷史&#xff1a; vue2 Lodop 制作可視化設計頁面 實現打印設計功能&#xff08;一&#xff09; 前言&#xff1a; 之前本來打算用直接拿之前做的vue2版本改改就發的&#xff0c;但考慮到現在主流都是vue3了&#xff0c;所以從這篇文章開始使用vue3來寫&#xff0c;以及最后…

速盾:cdn加速js

CDN加速是一種將網站內容分布到全球各地的服務器上來提高網站訪問速度和穩定性的技術手段。CDN即內容分發網絡&#xff0c;其核心原理是將靜態資源&#xff08;例如圖片、CSS、JavaScript文件等&#xff09;緩存到離用戶最近的服務器節點上&#xff0c;使用戶可以更快地獲取網站…

三相LCL濾波型PWM逆變器仿真設計

參考并網電流外環電容電流前饋內環的雙閉環控制結構&#xff0c;在光伏和風力發電網側變換器中的應用&#xff0c;可以顯著提高系統的穩定性和效率。在并網電流外環中&#xff0c;通過檢測電網電流并與其參考值進行比較&#xff0c;可以得到一個電流誤差信號。這個電流誤差信號…

MySQL基礎查詢與復雜查詢

基礎查詢 1、查詢用戶信息&#xff0c;僅顯示用戶的姓名與手機號&#xff0c;用中文顯示列名。中文顯示姓名列與手機號列。 2、根據商品名稱進行模糊查詢&#xff0c;模糊查詢需要可以走索引&#xff0c;需要給出explain語句。使用explain測試給出的查詢語句&#xff0c;需要顯…

程序員職業發展指南,如何選擇適合自己的就業方向?

隨著科技的發展和數字化時代的到來&#xff0c;程序員是IT行業中的熱門職業。尤其是近幾年移動互聯網的迅速發展&#xff0c;IT人才更是緊缺&#xff0c;越來越多的人加入程序員這個行列。 從事程序員工作&#xff0c;如何接項目呢&#xff1f;YesPMP是一個專注于互聯網外包的平…

【知識學習】闡述Unity3D中動畫渲染的概念及使用方法示例

Unity3D中的卡通渲染&#xff08;Cartoon Rendering&#xff09;是一種渲染技術&#xff0c;它模仿傳統手繪動畫或漫畫的視覺效果。這種渲染風格通常具有鮮明的顏色、清晰的輪廓線和簡化的光影效果&#xff0c;常用于制作動畫、游戲和其他視覺媒體。 卡通渲染的基本概念 輪廓…

<sa8650>QCX ISP Tuning 使用詳解 — Tuning前置條件

<sa8650>QCX ISP Tuning 使用詳解 — Tuning前置條件 一 如何安裝 Qualcomm Chromatix? 攝像頭校準工具二 如何使用 Qualcomm Chromatix? tuning工具創建tuning項目2.1 創建工程前提依賴2.2 創建工程2.3 添加場景2.4 編輯區域觸發器三 如何創建Tuning 樹一 如何安裝 Qualco…