使用AWS PutStream/GetStream读写XML字符串时遇HashStream位置错误
AWS GetStream 读取流报错解决方案
问题描述
使用AWS.putStream存储XML字符串后,调用AWS.getStream获取内容时触发amazon.util.internal.hashstream at position错误,尝试读取流时又出现“无法读取流”错误。
触发错误的代码如下:
获取文件时的代码
Stream fileStream = _AWS.GetStream(filepath);
读取流时的代码
using (StreamReader reader = new StreamReader(fileStream)) { string result = reader.ReadToEnd(); Debug.WriteLine(fileStream.ToString()); }
解决方案
问题根源
AWS SDK返回的HashStream是带校验逻辑的特殊流,默认可能存在流位置偏移、不支持重复读取等限制,导致读取失败。
具体解决方法
重置流起始位置
在读取流前,将流的位置重置到起始处,确保从开头读取:Stream fileStream = _AWS.GetStream(filepath); fileStream.Position = 0; // 重置流到起始位置 using (StreamReader reader = new StreamReader(fileStream)) { string result = reader.ReadToEnd(); Debug.WriteLine(result); // 输出读取到的XML内容,而非流的类型信息 }复制到内存流读取
将AWS返回的流复制到MemoryStream中,规避原HashStream的限制:using (Stream fileStream = _AWS.GetStream(filepath)) using (MemoryStream ms = new MemoryStream()) { fileStream.CopyTo(ms); ms.Position = 0; // 重置内存流到起始位置 using (StreamReader reader = new StreamReader(ms)) { string result = reader.ReadToEnd(); Debug.WriteLine(result); } }
额外注意事项
- 不要调用
fileStream.ToString()输出内容,该方法仅返回流的类型名称,应输出读取到的result变量。 - 所有流对象都用
using语句包裹,确保资源自动释放,避免内存泄漏。
内容的提问来源于stack exchange,提问作者user3738874
相关产品推荐
相关产品推荐

