【发布时间】:2015-05-01 13:09:54
【问题描述】:
我正在为学校作业开发字符串压缩器,
有一个我似乎无法解决的错误。压缩数据正在使用 FileWriter 写入文件,由字节数组表示。压缩算法返回一个输入流,因此数据流如下:
piped input stream
-> input stream reader
-> data stored in char buffer
-> data written to file with file writer.
现在,错误是,对于一些非常特定的字符串,字节数组中的倒数第二个字节写入错误。它总是相同的位值“11111100”。
每次都是这个位值,总是倒数第二个字节。
以下是代码中的一些示例:
InputStream compress(InputStream){
//...
//...
PipedInputStream pin = new PipedInputStream();
PipedOutputStream pout = new PipedOutputStream(pin);
ObjectOutputStream oos = new ObjectOutputStream(pout);
oos.writeObject(someobject);
oos.flush();
DataOutputStream dos = new DataOutputStream(pout);
dos.writeFloat(//);
dos.writeShort(//);
dos.write(SomeBytes); // ---Here
dos.flush();
dos.close();
return pin;
}
void write(char[] cbuf, int off, int len){
//....
//....
InputStreamReader s = new InputStreamReader(
c.compress(new ByteArrayInputStream(str.getBytes())));
s.read(charbuffer);
out.write(charbuffer);
}
例如,触发它的字符串是“hello and good evenin”。
我曾尝试遍历字节数组并一一写入,但没有帮助。
还值得注意的是,当我尝试使用算法本身中的输出流写入文件时,它运行良好。顺便说一句,这种设计不是我的选择。
所以我不确定我在这里做错了什么。
【问题讨论】:
标签: java string file stream compression