Java中如何将写入文件的数组异常打印输出转换回原始值
相关值的正式定义与属性
[C@252ccf04 是Java中char数组对象调用默认Object.toString()方法输出的标准格式字符串,结构规则如下:
- 开头的
[标识当前对象是数组类型 - 后续的
C标识数组的元素类型为char @是固定分隔符- 末尾的十六进制字符串是该数组对象的身份哈希码(identity hash code),对应
System.identityHashCode(数组对象)返回值的十六进制形式,不属于数组内容的哈希码,仅和对象的运行时内存身份相关,不携带任何数组存储的内容信息。
你的需求无法直接实现
你直接把char数组对象写入文件时,写入的就是上述默认toString()的输出结果,原始char数组存储的123456内容根本没有被写入文件,仅读取[C@252ccf04这个字符串不可能反向还原出原始的数组内容。你现有代码输出[[, C, @, 2, 5, 2, c, c, f, 0, 4],本质是把读取到的[C@252ccf04字符串本身拆成了单个字符的数组,和原始数组没有关联。
正确的char数组持久化实现方案
如果需要后续能从文件读取还原char数组内容,写入阶段需要主动对char数组做内容转换,不能直接写入数组对象:
写入侧示例
char[] originPass = new char[]{'1','2','3','4','5','6'}; // 方案1:转成普通字符串写入,适合纯内容存储场景 String writeContent = new String(originPass); // 此处省略将writeContent写入文件的逻辑
读取侧示例
// 读取文件内容得到字符串 String fileContent = 读取文件返回的字符串; char[] pass = fileContent.toCharArray(); System.out.println(Arrays.toString(pass)); // 输出为:[1, 2, 3, 4, 5, 6]
内容的提问来源于stack exchange,提问作者hamid
相关产品推荐
相关产品推荐

