随机存取文件读取西里尔文UTF-8 java

随机存取文件读取西里尔文UTF-8 java,java,utf-8,randomaccessfile,cyrillic,Java,Utf 8,Randomaccessfile,Cyrillic,伙计们 我无法使用RandomAccessFile从文件中读取西里尔文文本 下面是一个简单的程序,它使用以下格式将信息写入特定文件(西里尔文字): 键长、值长、键、值 然后程序尝试读取此信息,但我的输出不正确: writing success keyLength = 10, valueLength = 4 read: килло, гр UPD 预期产出: writing success keyLength = 10, valueLength = 4 read: киллограмм, сал

伙计们

我无法使用
RandomAccessFile
从文件中读取西里尔文文本

下面是一个简单的程序,它使用以下格式将信息写入特定文件(西里尔文字):

键长、值长、键、值

然后程序尝试读取此信息,但我的输出不正确:

writing success
keyLength = 10, valueLength = 4
read: килло, гр
UPD 预期产出:

writing success
keyLength = 10, valueLength = 4
read: киллограмм, сала
有什么问题?(除了我脑子小的问题)

import java.io.FileNotFoundException;
导入java.io.RandomAccessFile;
导入java.io.IOException;
公共班机{
公共静态void main(字符串[]args){
字符串fileName=“file.db”;
RandomAccessFile outputFile=null;
试一试{
outputFile=新的随机访问文件(文件名,“rw”);
}catch(filenotfounde异常){
System.err.println(e.getMessage());
系统出口(1);
}
String key=“аааааааааа;
字符串值=“Саааа”;
试一试{
outputFile.writeInt(key.length());
outputFile.writeInt(value.length());
outputFile.write(key.getBytes(“UTF-8”);
outputFile.write(value.getBytes(“UTF-8”);
}捕获(IOE异常){
System.err.println(e.getMessage());
系统出口(1);
}
System.out.println(“编写成功”);
RandomAccessFile inputFile=null;
试一试{
inputFile=新的随机访问文件(文件名为“r”);
}catch(filenotfounde异常){
System.err.println(e.getMessage());
系统出口(1);
}
int keyLength=0,valueLength=0;
试一试{
keyLength=inputFile.readInt();
valueLength=inputFile.readInt();
}捕获(IOE异常){
System.err.println(e.getMessage());
}
System.out.println(“keyLength=“+keyLength+”,valueLength=“+valueLength”);
如果(keyLength问题是

outputFile.writeInt(key.length());
String#length()

返回此字符串的长度。长度等于数字 字符串中Unicode代码单位的数目

在本例中,它返回值
10
,该值不是表示该字符串所需的字节数

你想要的是

key.getBytes("UTF-8").length
用作

byte[] keyBytes = key.getBytes("UTF-8");
outputFile.writeInt(keyBytes.length);

同样,对于

您的预期输出是什么?@SotiriosDelimanolis,updIf如果您按顺序读/写,
java.io.Writer
Reader
将包装输出流/输入流,并为您处理UTF-8或其他字符编码。您确定这不是更好的解决方案吗?@NinjaTurtle Al因此,您有大量的
try-catch
块。为什么不将所有代码包装在一个块中呢?无论如何,您总是要退出应用程序。
byte[] keyBytes = key.getBytes("UTF-8");
outputFile.writeInt(keyBytes.length);