我有把从数据源收集我的电脑(比如,Excel或Access)上接收应用程序在Android平板电脑数据的应用程序。 我在发送之前压缩数据,然后在接收后解压缩它的测试阶段。 我在C#端使用GZIP这一点,与DotNetZip和内置的GZIPInputStream类在Java端。
我在得到它的问题才能正常工作。 当我做一个测试只在一侧(压缩和解压,以查看数据是否保持不变),一切都很好。 它适用于C#和Java的。 但是,当我得到的数据点被发送过来,收到,我碰到这个问题:“未知格式(幻数ef1f)” 我在哪里见过这个已经讨论了其他SO职位,但答案似乎并没有帮助。
下面是我使用压缩的C#端的代码:
public void compressData() {
byte[] buffer = Ionic.Zlib.GZipStream.CompressBuffer(this.RawStreamData.ToArray());
this.RawStreamData = new MemoryStream(buffer);
}
这里是我用来在Java端解压缩的代码。 由于数据是由一个BufferedReader读入,我必须从炭[]转换为byte []最初:
public NetMessage decompressMsg(NetMessage nMsg) throws IOException {
ByteArrayOutputStream baOut = new ByteArrayOutputStream();
OutputStreamWriter osWriter = new OutputStreamWriter(baOut);
osWriter.write(nMsg.getRawMsg()); //.getRawMsg() returns a char[] of the raw data
osWriter.close();
ByteArrayInputStream baIn = new ByteArrayInputStream(baOut.toByteArray());
GZIPInputStream gzIn = new GZIPInputStream(baIn);
byte[] buffer = new byte[128];
int nReadBytes = gzIn.read(buffer);
String sDecompMsg = new String(buffer);
while (nReadBytes > -1) {
buffer = new byte[128];
nReadBytes = gzInput.read(buffer);
String sTemp = new String(buffer);
sDecompMsg += sTemp;
}
nMsg.setRawMsg(sDecompMsg.toCharArray());
return nMsg;
}
当我尝试构建GZIPInputStream它抛出异常。 我已经知道我是从重建所产生的解压缩缓冲区消息的方式是错误的(从测试仅在Java端),但是这是我首先需要达到的一个问题! :) 任何帮助,将不胜感激。 我怀疑它可能有一些做的压缩级别设置; 在C#中我使用的是默认的,但据我所知没有在Java端没有这样的设置。 该BufferedReader中与ASCII编码创建。