仲間!
を使用してファイルからキリル文字を読み取るのに問題がありますRandomAccessFile
。
以下は、そのような形式を使用して特定のファイル (キリル文字) に情報を書き込む簡単なプログラムです。
keyLength, valueLength, key, value
次に、プログラムはこの情報を読み取ろうとしますが、私の出力は正しくありません:
writing success
keyLength = 10, valueLength = 4
read: килло, гр
UPD 期待される出力:
writing success
keyLength = 10, valueLength = 4
read: киллограмм, сала
何が問題ですか?(脳が小さいという問題を除く)
import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
String fileName = "file.db";
RandomAccessFile outputFile = null;
try {
outputFile = new RandomAccessFile(fileName, "rw");
} catch (FileNotFoundException e) {
System.err.println(e.getMessage());
System.exit(1);
}
String key = "киллограмм";
String value = "сала";
try {
outputFile.writeInt(key.length());
outputFile.writeInt(value.length());
outputFile.write(key.getBytes("UTF-8"));
outputFile.write(value.getBytes("UTF-8"));
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
System.out.println("writing success");
RandomAccessFile inputFile = null;
try {
inputFile = new RandomAccessFile(fileName, "r");
} catch (FileNotFoundException e) {
System.err.println(e.getMessage());
System.exit(1);
}
int keyLength = 0, valueLength = 0;
try {
keyLength = inputFile.readInt();
valueLength = inputFile.readInt();
} catch (IOException e) {
System.err.println(e.getMessage());
}
System.out.println("keyLength = " + keyLength + ", valueLength = " + valueLength);
if (keyLength <= 0 || valueLength <= 0) {
System.err.println("key or value length is negative");
System.exit(1);
}
byte[] keyBytes = null, valueBytes = null;
try {
keyBytes = new byte[keyLength];
valueBytes = new byte[valueLength];
} catch (OutOfMemoryError e) {
System.err.println(e.getMessage());
System.exit(1);
}
try {
inputFile.read(keyBytes);
inputFile.read(valueBytes);
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
try {
System.out.println("read: " + new String(keyBytes, "UTF-8") + ", " + new String(valueBytes, "UTF-8"));
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}