簡體   English   中英

將字節數組寫入txt文件並讀回

[英]Writing byte array to txt-file and reading it back

我有一個字節數組,需要將其寫入txt文件。 之后,我需要從那里讀取該字節數組,這里出現了問題。 我讀了這個將Java字符串轉換為字節數組的方法,但是它僅適用於正數。 我這里有

public static void main(String args[]) throws UnsupportedEncodingException
{
    byte [] a= new byte [2];
    a[0]=15;
    a[1]=-2;        
    String line = new  String(a, "UTF-8");      
    byte[] b = line.getBytes();
    System.out.println(b[0]);
    System.out.println(b[1]);
}

結果是

15
63

toString()不能正常工作。

預先感謝您的幫助。

對我來說,這保留了負值:

package com.sandbox;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Arrays;

public class Sandbox {

    public static void main(String args[]) throws UnsupportedEncodingException {
        byte[] a = new byte[2];
        a[0] = 15;
        a[1] = -2;
        String line = new String(a);
        byte[] b = line.getBytes();
        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.toString(b));
        System.out.println(Charset.defaultCharset());
    }        
}

對我來說,這輸出:

[15, -2]
[15, -2]
windows-1250

基本上,您使用了錯誤的字符集來保留負字節。 您可以在此處找到更多信息。 實際上,您嘗試執行的操作中的缺陷是首先將字節放入String中。 如您所見

...如果您以byte []開頭並且實際上不包含文本數據,則沒有“正確轉換”。 字符串用於文本,byte []用於二進制數據,唯一真正明智的做法是避免在它們之間進行轉換,除非絕對必要。

如果確實必須使用String來保存二進制數據,那么最安全的方法是使用Base64編碼。

如果您實際上不需要將其存儲在字符串中,則應從輸入/輸出流向文件寫入/讀取。 有很多SO答案向您展示如何執行此操作。

我寫了一個小函數,將[-3, 123, 89, 0, -34, 78, -45, -78]這樣的String轉換為字節數組。 我不知道如何使用Base64編碼。 所以我寫了我的小函數。 要獲取上述字符串,我們應該執行String line = new String(Arrays.toString(name_of_array))

public class StringToByteArray {
public static void main(String args[])
{
    String line= "[-3, 123, 89, 0, -34, 78, -45, -78]";
    String some=line.substring(1, line.length()-1);     
    int element_counter=1;

    for(int i=0; i<some.length(); i++)
    {           
        if (some.substring(i, i+1).equals(","))
        {
            element_counter++;
        }       

    }
    int [] comas =new int[element_counter-1];
    byte [] a=new byte[element_counter];
    if (a.length==1)
    {
        a[0]= Byte.parseByte(some.substring(0));
    }       
    else 
    {
        int j=0;
        for (int i = 0; i < some.length(); i++) 
        {
            if (some.substring(i, i+1).equals(","))
            {
                comas[j]=i;
                j++;
            }
        }           
        for (int i=0; i<element_counter; i++)
        {
            if(i==0)
            {
                a[i]=Byte.parseByte(some.substring(0, comas[i]));
            }
            else if (i==element_counter-1)
            {
                a[i]=Byte.parseByte(some.substring(comas[comas.length-1]+2));
            }
            else
            {
                a[i]=Byte.parseByte(some.substring(comas[i-1]+2, comas[i]));
            }

        }
    }
    System.out.println(a[0]);

}
}

結果-3

希望對您有所幫助

暫無
暫無

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

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