gpt4 book ai didi

Java如何将字符串以字节形式写入文件并获取字符串

转载 作者:行者123 更新时间:2023-12-02 05:23:37 25 4
gpt4 key购买 nike

我需要在文件中以 UTF-8 字节形式写入一个字符串,然后从文件中取回这些字节并将其转换回字符串,最终得到相同的字符串。可能听起来很简单,但存在一个隐藏的问题,例如文件中的符号不​​正确。我的意思是,在附加到文件后,它必须包含类似以下内容:

00000008 d0bad0bb d18ed187 00000010 etc...

但它包含类似的内容:

mystring ---a lot of space--- (and the symbol that doesn't display here)

那么,我已经做了什么?我已经尝试过这种方法:

在代码阅读此内容之前:我在 HashMap < String, String > 中保留字符串,这就是为什么我的代码包含 get(...) 等。

try {
FileOutputStream oStream = new FileOutputStream("filename.txt");
Set<String> keySet = storage.keySet();
ByteBuffer buffer = ByteBuffer.allocate(1024);
for (String key : keySet) {
byte[] keyInByte = key.getBytes("UTF-8");
byte[] valueInByte = storage.get(key).getBytes("UTF-8");
oStream.write(buffer.putInt(0, valueInByte.length).array());
oStream.write(keyInByte);

oStream.write((buffer.putInt(0, valueInByte.length).array()));
oStream.write(valueInByte);
}
} catch (Exception e) {
System.err.println("permission denied");
}

我也尝试过使用 PrintWriter、FileWriter 等...但它没有提供我所需要的。例如,其中一些需要 toString() 方法,但在 toString() 之后我将失去使用字节的能力。

!请注意,我尝试将记事本更改为 UTF-8 编码,但没有给出任何结果。

最佳答案

如果你想使用属性,你可以这样做。

new Properties(map).save(new FileOutputStream("filename.proeprties"));

加载属性

Properties prop = new Properties();
prop.load(new FileInputStream("filename.properties"));
map.putAll(prop);

要节省复制数据,您可以使用属性作为 map 。

key1=value1
key2=value2

注意:键不能包含 = 或换行符。

<小时/>

这就是我以二进制格式实现的方法

DataOutputStream dos = new BufferedOutputStream(new FileOutputStream("filename.dat")));
dos.writeInt(map.size());
for (Map.Entry<String, String> entry : map.entrySet()) {
dos.writeUTF(entry.getKey());
dos.writeUTF(entry.getValue());
}
dos.close();
<小时/>

这就是我使用 UTF-8 以文本形式编写的方式

PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOuputStream("filename.txt") "UTF-8"));
pw.println(map.size());
for (Map.Entry<String, String> entry : map.entrySet()) {
pw.println(encode(entry.getKey()));
pw.println(encode(entry.getValue()));
}
pw.close();


public static String encode(String s) {
// if you can assume no new lines, don't do anything.
return s.replaceAll("\\\\", "\\\\\\\\").replaceAll("\n", "\\\\n");
}

这将产生类似的内容

key1
value1
key2
value2

你可以很容易地编辑它。如果您假设该键没有 =: 或制表符,则可以像属性文件一样使用一行

关于Java如何将字符串以字节形式写入文件并获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com