遇到一些我无法理解的问题。我有一个字符串,我想将它写入文件.txt中的字节(用于测试)。这是我的代码:
// Check writeVarString, writing in checkVarString.txt to verify
fos = new FileOutputStream(pathCheckFile + "//checkVarString.txt");
dos = new DataOutputStream(fos);
VarInt.writeVarString("Test number 1 for function writeVarString()", dos);
这是我的函数writeVarString():
public static void writeVarString(String value, DataOutput out) throws IOException {
try {
int valueLength = value.length();
if (valueLength > 0) {
out.writeBytes(value);
}
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
好的,它应该有效。然后我开始我的应用程序,当我打开我的测试文件时,我得到了这个:
函数writeVarString()的测试编号1
为什么我会得到一个可读的字符串?我应该得到字节。 我已经尝试使用byte [] array = value.getBytes()然后使用out.write(array)但得到了相同的结果。
答案 0 :(得分:3)
因为每个字符都存储为文件中的字节。您的文本编辑器读取字节并使用字体与char匹配。还存在用于字符串操作的编码机制。您可以使用十六进制编辑器或插件来查找字节/十六进制表示。
答案 1 :(得分:1)
你正确地做到了。文件中写的是字节。实际上,您写入文件的任何内容都将是字节。
但是,当您读取文件时,应用程序(文本编辑器,cat命令等)将始终尝试将文件解释为文本。
所以你的解决方案是正确的,只是你不能看原始字节。
答案 2 :(得分:0)
在writeBytes文档中指定:
void java.io.DataOutputStream.writeBytes(String s)throws IOException
将字符串作为字节序列写入基础输出流。通过丢弃其高8位,按顺序写出字符串中的每个字符。如果没有抛出异常,则写入的计数器将增加s的长度。
请注意它写了#34;字符串到底层输出流作为字节序列",每个字符/整数/短/长是一个字节序列(它本身是一个位序列)。所以这只是计算机科学的基础知识。