1. 程式人生 > >Java寫檔案的方式-二進位制檔案

Java寫檔案的方式-二進位制檔案

前言

當大家面臨需要持久化的資料的時候,可能會面臨很多選擇,比如資料庫,檔案等。博主這裡有一個需求,有很多組資料,0-4096的整型,很顯然如果使用資料庫,每一組資料作為一條記錄,總是感覺浪費,而且這些資料,單一值的價值並不大,通常需要幾百組放到一起才有價值。所以如果將幾百組資料匯聚到一個cache檔案中,那就可以解決這個問題了,但是考慮到整型,如果我們可以直接利用整型進行儲存,那是不是可以達到最高的效率呢,比如二進位制檔案。所以這篇博文就探討下Java中寫檔案的方式。

FileWriter

FileWritter, 字元流寫入字元到檔案。預設情況下,它會使用新的內容取代所有現有的內容,然而,當指定一個true (布林)值作為FileWritter建構函式的第二個引數,它會保留現有的內容,並追加新內容在檔案的末尾。

  1. 替換所有現有的內容與新的內容。

new FileWriter(file);

  1. 保留現有的內容和附加在該檔案的末尾的新內容。

new FileWriter(file,true);

示例程式碼:

    private static void outByFileWriter(String filePath) {
        File target = new File(filePath);
        if (target.exists() && target.isFile()){
            boolean flag = target.delete();
        }
        try
{ if (target.createNewFile()){ for (int i = 0; i < 1024; i++) { FileWriter fileWriter = new FileWriter(target.getAbsoluteFile(), true); fileWriter.write(i); fileWriter.close(); } } } catch
(IOException e) { e.printStackTrace(); } }

結果:

0AgKd.png

0Atla.png

可以看到檔案確實是在用二進位制的形式在儲存,但是利用write(int integer)的方法進行整型的儲存會儲存一個8位整型,並不能達到我們的需求。

BufferedWriter

緩衝字元(BufferedWriter )是一個字元流類來處理字元資料。不同於位元組流(資料轉換成位元組),你可以直接寫字串,陣列或字元資料儲存到檔案。

示例程式碼:

    private static void outByBufferWriter(String filePath) {
        File target = new File(filePath);
        if (target.exists() && target.isFile()){
            boolean flag = target.delete();
        }
        try {
            if (target.createNewFile()){
                BufferedWriter out = new BufferedWriter(new FileWriter(target.getAbsoluteFile(), true));
                out.write(128);
                out.write(-128);
                out.write(129);
                out.write(-129);

                out.close();
//                for (int i = 0; i < 1024; i++) {
//                    BufferedWriter out = new BufferedWriter(new FileWriter(target.getAbsoluteFile(), true));
//                    out.write(i);
//                    out.close();
//                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

小思考

為什麼寫入檔案後,檔案的內容並不是我們期待的東西呢?

public void write(int c) throws IOException 寫入單個字元。
c - 指定要寫入字元的ASCII。

FileOutputStream

檔案輸出流是一種用於處理原始二進位制資料的位元組流類。為了將資料寫入到檔案中,必須將資料轉換為位元組,並儲存到檔案。

示例程式碼:


    private static void outByFileDataOutputStream(String filePath) {
        File target = new File(filePath);
        if (target.exists() && target.isFile()){
            boolean flag = target.delete();
        }
        try {
            if (target.createNewFile()){
                for (int i = 0; i < 4096; i++) {
                    DataOutputStream out = new DataOutputStream(new FileOutputStream(filePath, true));
                    byte[] bytes = new byte[2];
                    bytes[0] = (byte) (i / 256);
                    bytes[1] = (byte) (i % 256);
                    out.write(bytes);
//                    out.writeInt(i);
                    out.close();
                }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

結果:

0A1vX.md.png

0A4UG.png

最後結果達到了我們預期的效果,既儲存了資料,又節省了空間,very good!

相關推薦

Java檔案方式-二進位制檔案

前言 當大家面臨需要持久化的資料的時候,可能會面臨很多選擇,比如資料庫,檔案等。博主這裡有一個需求,有很多組資料,0-4096的整型,很顯然如果使用資料庫,每一組資料作為一條記錄,總是感覺浪費,而且這些資料,單一值的價值並不大,通常需要幾百組放到一起才有價值。

C/C++讀文字檔案二進位制檔案

//採用CPP模式讀取txt void TextRead_CPPmode() { fstream f; f.open("txt_out.txt",ios::in); //檔案開啟方式選項: // ios::in    = 0x01, //供讀,檔案不存在則建立(ifstream預設的開啟方式) /

利用java XML 修改XML檔案

import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Write

c檔案操作-二進位制檔案

上次已經提到過了檔案基本分為二進位制檔案和文字檔案,文字檔案是人可以直接讀的懂的以文字的方式表達出來的檔案,二二進位制檔案則需要機器以特定的方式或者軟體來開啟,比如音訊視訊檔案都是二進位制的。 今天我們通過一個簡單的例子來了解一下二進位制檔案讀寫以及fseek()函式的使用

java中如何判斷一個檔案二進位制檔案還是文字檔案

現在的做法是把檔案讀進來,逐個解析每一個byte,如果有一個byte<0那麼斷定這個檔案是二進位制的,這在純英文的環境下可以工作,但是如果一個文字包含了中文字元,那麼這個檔案也會被判斷為二進位制檔案。 我在網上看看到有人也是逐個比較每一個byte,只不過是如果有一個b

java三種方式實現檔案的上傳

1: 實現檔案的上傳可以有好多途徑,最簡單的就是用sun公司提供的File類,可以簡單的實現檔案的上傳和顯示:           try {             InputStream stream = file.getInputStream();//把檔案讀入  

java按位元組方式檔案

java讀檔案  /* Readfile.java 讀取檔案的內容,並將原樣輸出至螢幕上 使用方法:java Readfile 檔名 */ import java.io.*; public class Readfile { public static void main(

python file模組中的文字檔案二進位制檔案以及字串和byte的理解

大前提:文字檔案和二進位制檔案都是以二進位制的方式存放到硬碟中的 看圖先~ 1. Python file讀寫加不加b w 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 wb

文字檔案二進位制檔案區別

1)文字檔案:這類檔案以文字的ASCII碼形式儲存在計算機中。它是以"行"為基本結構的一種資訊組織和儲存方式。  2)二進位制檔案:這類檔案以文字的二進位制形式儲存在計算機中,使用者一般不能直接讀懂它們,只有通過相應的軟體才能將其顯示出來。二進位制檔案一般是可執行程式、圖形、

媒體檔案二進位制檔案分析工具 elecard, bless and ghex2 , mediainfo tools

二進位制檔案分析工具_bless_ghex2  bless  非常好用的一個二進位制檢視工具; hexedit ghex2 Elecard  工具介紹: 可以使用Elecard 檢視 媒體流資訊, SAnalyzer.exe 可以具體檢視流內的I P B

文字檔案二進位制檔案操作01(C)

現有一個二進位制檔案 E81_data.bin,其中儲存了 20 個整數, 請將檔案儲存至 C 盤根目錄下的 cdata 資料夾。 編寫程式 完成如下功能: (1) 編寫一個函式, 讀取出這些整數。 (2) 編寫一個函式,對所有整數按照從小到大排序。 (3) 編寫一個函式,

文字檔案二進位制檔案操作03(C)

現有一個二進位制檔案 E83_data.bin,檔案中包含了若干學生資訊, 請將檔案儲存至 C 盤根目錄下的 cdata 資料夾。其中學生資訊結構如下: struct _student { char ID[15]; // 學號 char name[20]; // 姓名 int

fopen,文字檔案二進位制檔案

暮鼓集    行走集 在學習C語言檔案操作後,我們都會知道開啟檔案的函式是fopen,也知道它的第二個引數是標誌字串。其中,如果字串中出現’b’,則表明是以開啟二進位制(binary)檔案,否則是開啟文字檔案。 那麼甚麼是文字檔案,甚麼是二進位

文字檔案二進位制檔案的區別和聯絡

  今天閒來無事,也學一下別人寫一下部落格:   在一些專案中常遇到一些檔案的操作,今天就總結一下。或許自己寫一寫,把思路縷一縷,反正沒什麼事情;   下面我在*.txt檔案中寫了下面一段文字: abcABCzgm張國敏 其實它真正在硬碟中寫入的是(可以通過UltraEdit

文字檔案二進位制檔案判定

現在我有一個小說檔案:完美世界.txt。它是文字檔案,我把它字尾改了,變成:完美世界.avi。那麼其實它還是一個文字檔案,你照樣可以用記事本開啟它。 我個人認為可以這樣判定一個檔案是不是文字檔案:”如果一個檔案可以用文字編輯軟體開啟(如記事本、notepad+

git .gitignore 檔案 解決二進位制檔案衝突問題

.gitignore  主要是新增 忽略檔案 。最近團隊開發經常出現  UserInterfaceState.xcuserstate 衝突,打開發現是二進位制檔案 ,沒法解決衝突。 只好 rm -rf 之,次數多了真煩啦。 一勞永逸解決方案: 1,找到 .gitignore 新增 UserInterf

文字檔案二進位制檔案在儲存時的區別

1、二進位制檔案是把記憶體中的資料按其在記憶體中的儲存形式原樣輸出到磁碟上存放,也就是說存放的是資料的原形式。 2、文字檔案是把資料的終端形式的二進位制資料輸出到磁碟上存放,也就是說存放的是資料的

淺談C語言中文字檔案二進位制檔案

C語言中,按檔案中的資料組織形式來分,資料檔案可分為ASCII碼檔案(即文字檔案)和二進位制檔案。 文字檔案在磁碟中存放時每個字元對應一個位元組,用於存放對應的ASCII碼。 二進位制檔案把資料按其在記憶體中的儲存形式存放在磁碟上,一個位元組並不一定對應一個字元。 對於A

文字檔案二進位制檔案的差異和區別

轉自:https://blog.csdn.net/colourful_sky/article/details/80334250 廣義上的二進位制檔案包括文字檔案,這裡討論的是狹義上的二進位制檔案與文字檔案的比較: 能儲存的資料型別不同 文字檔案只能儲存c

Python socket收發檔案以及二進位制檔案打包

Python socket介紹 Python 二進位制檔案處理 收發二進位制檔案 client #-*-coding:utf-8-*- import socket import os import sys import struct #