私はC#の世界に不慣れです。{abcde}{CompressedMessage} という形式のライブ フィードをキャプチャするソリューションを迅速に展開するために使用しています。ここで、{abcde} は圧縮メッセージの長さを示す 5 文字です。CompressedMessage は XCeedZip.dll を使用して圧縮されており、dll の uncompress メソッドを使用して圧縮解除する必要があります。uncompress メソッドは、成功または失敗を示す整数値を返します (ライセンスがない、解凍に失敗したなど、さまざまな種類の)。uncompress メソッドからの戻り値を参照するために、失敗 1003 http://doc.xceedsoft.com/products/XceedZip/を受け取りました。
while(true){
byte[] receiveByte = new byte[1000];
sock.Receive(receiveByte);
string strData =System.Text.Encoding.ASCII.GetString(receiveByte,0,receiveByte.Length);
string cMesLen = strData.Substring(0,5); // length of compressed message;
string compressedMessageStr = strData.Substring(5,strData.Length-5);
byte[] compressedBytes = System.Text.Encoding.ASCII.GetBytes(compressedMessageStr);
//instantiating xceedcompression object
XceedZipLib.XceedCompression obXCC = new XceedZipLib.XceedCompression();
obXCC.License("blah");
// uncompress method reference http://doc.xceedsoft.com/products/XceedZip/
// visual studio displays Uncompress method signature as Uncompress(ref object vaSource, out object vaUncompressed, bool bEndOfData)
object oDest;
object oSource = (object)compressedBytes;
int status = (int) obXCC.Uncompress(ref oSource, out oDest, true);
Console.WriteLine(status); /// prints 1003 http://doc.xceedsoft.com/products/XceedZip/
}
したがって、基本的に私の質問は、uncompress メソッドの呼び出しと、パラメーターを渡す正しい方法に要約されます。私は .net の世界でなじみのない領域にいるので、質問が本当に単純化されていても驚かないでしょう。
返信ありがとう..
###################################### アップデート私は今、次のことをやっています:
int iter = 1;
int bufSize = 1024;
byte[] receiveByte = new byte[bufSize];
while (true){
sock.Receive(receiveByte);
//fetch compressed message length;
int cMesLen = Convert.ToInt32(System.Text.Encoding.ASCII.GetString(receiveByte,0,5));
byte[] cMessageByte = new byte[cMesLen];
if (i==1){
if (cMesLen < bufSize){
for (int i = 5; i < 5+cMesLen; ++i){
cMessageByte[i-5] = b[i];
}
}
}
XceedZipLib.XceedCompression obXCC = new XceedZipLib.XceedCompression();
obXCC.License("blah");
object oDest;
object oSource = (object) cMessageByte;
int status = (int) obXCC.Uncompress(ref oSource, out oDest, true);
if (iter==1){
byte[] testByte = objectToByteArray(oDest);
Console.WriteLine(System.Text.Encoding.ASCII.GetString(testByte,0,testByte.Length));
}
}
private byte[] objectToByteArray(Object obj){
if (obj==null){
return null;
}
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms,obj);
return ms.ToArray();
}
問題は、testByte writeline コマンドが意味不明な出力を出力することです。これを進める方法について何か提案はありますか?uncompress のステータス変数は良好で、現在は 0 です。