簡體   English   中英

例如將包含“ 0101010101001”的二進制字符串轉換為實際的二進制文件

[英]convert a binary string contains “0101010101001” for instance to actual binary file

問題聽起來很愚蠢,但是就像那樣

我有一個二進制字符串,其中包含一系列“ 0”和“ 1”。 如果我將其存儲為文本文件,它將非常龐大,因為每個字符大約需要8個字節。 但是實際上它應該小得多,因為“ 0”或“ 1”實際上只是1位(1字節/ 8)。 我的問題是如何用Java做到這一點?

編輯以避免混淆

我使用一種算法將所有數據編碼為“ 0”和“ 1”序列字符串。 因此1塊數據可能會變得非常大...一些1字符串的A4紙包含“ 0”和“ 1”。

我被困在將字符串(僅是“ 0”和“ 1”)記錄到實際二進制數據文件的步驟中……它比存儲包含“ 0”的文本文件要小得多和我假設的“ 1”

在不討論實現的情況下,一種簡單的編碼方案將是存儲二進制字符串的十進制值。 這樣,您的計算機將簡單地將二進制字符串存儲為適當大小的整數(int / short / long / etc)中的位。 不過,Dunno是否擁有最優雅的讀/寫過程。

如果以二進制形式存儲,則有2個符號。

如果以十六進制形式存儲,則有16個符號。

文本文件中的符號更多,字符更少。

如果存儲對您來說很重要,那么大多數人會做的是將數據存儲為二進制格式,然后進行壓縮(使用DataOutputStreamZipOutputStream )。

郵編非常快;-)

拒絕投票后更新 (請勿射擊Messenger-或至少說明您的拒絕投票...幫助我們為您提供幫助)

或者你可以使用這樣的東西

BigInteger bigInt = new BigInteger("100010001000100010001000100010011000011100010001000100010001000100010011000011111111111111111111111111111111111111111111111100",2);

BigDecimal bigDec = new BigDecimal(bigInt);

我做了更多的谷歌搜索,下面是我的情況下的解決方案...如果有人遇到與我相同的問題,我將解決方案放在那里:)

讀取后, 將二進制字符串表示形式轉換為 C#中的字節數組 我決定實施其Java版本

int numOfBytes = binarytring.length() / 8;
byte[] bytes = new byte[numOfBytes];

//store it down as 1 byte (8bits) each
for(int i = 0; i < numOfBytes; ++i) {
    // thanks https://stackoverflow.com/questions/6658388/why-java-throws-a-numberformatexception for help me out of the exception.
    bytes[i] = (byte) (Integer.parseInt(encoded.substring(8 * i, (8 * i) + 8), 2) & 0xFF);
}

FileOutputStream fos = new FileOutputStream("outputfilename"); 
fos.write(bytes);
fos.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM