- - PR -
クラスのLengthについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-18 08:45
mioさん
クラスのシリアライズは行っています。 クライアント側でデシリアライズして元のクラスデータにしたいのです。 シリアライズされたデータが受信途中か受信完了の判断がしたいのです。 | ||||||||
|
投稿日時: 2009-02-18 10:00
シリアライズ/デシリアライズよりも、Stream#Readについてということだと思いますが、
↑の原理が良く分かりませんが、
bufferに読み込んだものをつなげて、デシリアライズして下さい。 | ||||||||
|
投稿日時: 2009-02-18 10:15
turutosiyaさん
bufferに読み込んだものを繋げてデシリアライズすると動作します。 全てを読み終えた後に処理する場合です。 細切れで送られてくるデータを順次処理したいのです。 その際に細切れデータがクラスサイズ分あるかを判断したいのです。 Marshal.SizeOfやSizeOfなどでもうまくいかなくて。 | ||||||||
|
投稿日時: 2009-02-18 10:25
順次処理をするならば、シリアライズしないほうが良いかと思います。
すべてデータが揃わないと、デシリアライズできないので。 | ||||||||
|
投稿日時: 2009-02-18 23:48
ストリームを送るとかはやったことがないですが。
シリアライズした文字列の長さは内容によって変わってくるので、 長さで判断するのは無理じゃないでしょうか? 受信した文字列を調べて、 タグが全部閉じているかどうかを調べるとか、 そういうことになるように思えます。 | ||||||||
|
投稿日時: 2009-02-19 09:38
Byteのコレクションに1Byteずつ受信したものを代入し、代入するたびにコレクションからByte配列を取得or生成→デシリアライズを行い、例外が起きないときを受信が完了したと判断する。例外が発生する限りは受信中。っていうロジックも考えられますが、あまりお勧めはできません。
データの送受信のフォーマットをきちんと決めたほうが、幸せになれると思います。 |