C#中调用J#来压缩的问题

chinahuman 2006-01-20 09:24:27
因为要压缩的东东不一定是字串,所以想用byte数组往里传,但是有时候byte > 127的时候,运行就会出错:
其他信息: 值对于带符号的字节太大或太小。
不知道大家在调用的时候是怎么使用的呢?
...全文
132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahuzizyd 2006-01-20
  • 打赏
  • 举报
回复
也可以用SharpZib
s5689412 2006-01-20
  • 打赏
  • 举报
回复
你压缩的数值是不是超出sbyte的范围了?
你是怎么调用CompressString函数的?
chinahuman 2006-01-20
  • 打赏
  • 举报
回复
public override byte[] Encode(byte[] bytes)
{

sbyte[] input = new sbyte[bytes.Length];
for (int i = 0; i < input.Length; i++)
{
input[i] = System.Convert.ToSByte(bytes[i]);
}
sbyte[] sb = CompressString(input);
byte[] output = new byte[sb.Length];
for (int i = 0; i < input.Length; i++)
{
output[i] = System.Convert.ToByte(sb[i]);
}
return output;
}

private static sbyte[] CompressString(sbyte[] bytes)
{
Deflater f = new Deflater(Deflater.BEST_COMPRESSION);
f.setInput(bytes);
f.finish();

ByteArrayOutputStream o = new ByteArrayOutputStream(bytes.Length);
try
{
sbyte[] buf = new sbyte[BufferSize];
while (!f.finished())
{
int got = f.deflate(buf);
o.write(buf, 0, got);
}
}
finally
{
o.close();
}
return o.toByteArray();
}

就是使用那篇文章提供的代码
veryhappy 2006-01-20
  • 打赏
  • 举报
回复
http://www.codeproject.com/csharp/vmeasyzipunzip.asp
s5689412 2006-01-20
  • 打赏
  • 举报
回复
能不能把你的代码贴出来看看?
另外,你是用http://www.microsoft.com/china/msdn/library/langtool/vcsharp/miszipcompression.mspx
这篇文章的技术来压缩的吗?
hivak47 2006-01-20
  • 打赏
  • 举报
回复
还可以可以用SharpZib,比较不错的。
s5689412 2006-01-20
  • 打赏
  • 举报
回复
不会啊,如果你正常的转换的话,byte值怎么会超过范围呢?超过范围就不是byte值了啊。如果你能贴出一段会出错的具体的代码,我想有利于调试,能更好的帮助你。
chinahuman 2006-01-20
  • 打赏
  • 举报
回复
很简单的:中文字符,或是二进制的数据文件.因为我是从MemoryStream里面读到byte里的,所以很容易就出现byte值大于127的情况
s5689412 2006-01-20
  • 打赏
  • 举报
回复
你能不能给出一个调用CompressString的样例,我看看你用什么值来调用的。
chinahuman 2006-01-20
  • 打赏
  • 举报
回复
就是因为不想用SharpZip 所以才想用J#的.
数值有>127的.不知道有没有其它的解决方法.然道有这样的限制?或者是怎么把在C#中的流转化成为J#中的流?

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧