WriteBytes在我的文件中写String

时间:2017-11-22 10:59:29

标签: java string file byte

遇到一些我无法理解的问题。我有一个字符串,我想将它写入文件.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)但得到了相同的结果。

3 个答案:

答案 0 :(得分:3)

因为每个字符都存储为文件中的字节。您的文本编辑器读取字节并使用字体与char匹配。还存在用于字符串操作的编码机制。您可以使用十六进制编辑器或插件来查找字节/十六进制表示。

答案 1 :(得分:1)

你正确地做到了。文件中写的是字节。实际上,您写入文件的任何内容都将是字节。

但是,当您读取文件时,应用程序(文本编辑器,cat命令等)将始终尝试将文件解释为文本。

所以你的解决方案是正确的,只是你不能原始字节。

答案 2 :(得分:0)

在writeBytes文档中指定:

  

void java.io.DataOutputStream.writeBytes(String s)throws IOException

     

将字符串作为字节序列写入基础输出流。通过丢弃其高8位,按顺序写出字符串中的每个字符。如果没有抛出异常,则写入的计数器将增加s的长度。

请注意它写了#34;字符串到底层输出流作为字节序列",每个字符/整数/短/长是一个字节序列(它本身是一个位序列)。所以这只是计算机科学的基础知识。