ファイルからの読み込みが間違っを取得し、バイト?

Big_Bad_E:

だから、私は、ファイルに3つのlong型を保存しようとしていますが、それは私がバイト配列にし、それらの保存、それらを多くのデータ変換されますので。それらを保存するための私の現在の方法:

try (FileOutputStream output = new FileOutputStream(path, true)) {
                    //Put the data into my format
                    byte[] data = new byte[24];
                    main.getLogger().log(Level.INFO, "Saving most sig bits");
                    System.arraycopy(ByteUtils.longToBytes(uuid.getMostSignificantBits()), 0, data, 0, 8);
                    System.arraycopy(ByteUtils.longToBytes(uuid.getLeastSignificantBits()), 0, data, 8, 8);
                    System.arraycopy(ByteUtils.longToBytes(player.getTokens()), 0, data, 16, 8);
                    //Write data in the format
                    output.write(data);
                }

longToBytes方法:

private static ByteBuffer buffer = ByteBuffer.allocate(8);

public static byte[] longToBytes(long x) {
    System.out.println(x);
    buffer.putLong(0, x);
    return buffer.array();
}

バイト配列をファイルに保存されますが、最初のバイトは切り捨てられます。longToByesでprint文は8三回を印刷します。

元long型は以下のとおりです。

-9089798603852198353、-5339652910133477779、5992

私はバイト配列を印刷する場合は、私が得ます:

-127、-38、-116、84、97、-116、78、47、-75、-27、-67、-8、11、-100、-2、109、0、0、0、0、 0、0、23、104(24バイト)

しかし、私は参照ファイルに:23バイト(最初のボックスであるÚŒTaŒN/μå½ø(VT記号)œþm(NUL)(NUL)(NUL)(NUL)(NUL)(NUL)(ETB)時間で表示されません。メモ帳++)

しかし、私は使用してそれを読めば、

bytes = IOUtils.toByteArray(new FileReader(file));

そうですか:

64、-38、-116、84、97、-116、78、47、-75、-27、-67、-8、11、-100、-2、109、0、0、0、0、0 、0、23、104(24バイト)

-127何とか64に置き換えられています。

私はところでそれを印刷するために「」でバイトをCONCAT。

xiaofeng.li:

使用しないでくださいFileReaderファイルからの生のバイトを読み取ること。使用FileInputStream代わりに。

問題はFileReader、それが読み込むでcharsはない、bytesいくつかの文字エンコーディング(デフォルト1何も指定しなかった場合)を使用してバイトを復号化するために試みることによって、ファイルから、。

bytes = IOUtils.toByteArray(new FileInputStream(file));

別の方法としては、使用することができるDataOutputStream出力ストリームに長い直接書き込むと使用するためにDataInputStream、入力ストリームから読み取ります。

try (DataOutputStream out = new DataOutputStream(new FileOutputStream(file))) {
    out.writeLong(uuid.getMostSignificantBits());
    out.writeLong(uuid.getLeastSignificantBits());
    out.writeLong(player.getTokens());
}

try (DataInputStream in = new DataInputStream(new FileInputStream(file))) {
    long uuidMSB = in.readLong();
    long uuidLSB = in.readLong();
    long tokens = in.readLong();
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=180093&siteId=1