- PR -

クラスのLengthについて

投稿者投稿内容
未記入
会議室デビュー日: 2009/02/04
投稿数: 8
投稿日時: 2009-02-18 08:45
mioさん
クラスのシリアライズは行っています。

クライアント側でデシリアライズして元のクラスデータにしたいのです。
シリアライズされたデータが受信途中か受信完了の判断がしたいのです。
turutosiya
常連さん
会議室デビュー日: 2003/06/10
投稿数: 49
お住まい・勤務地: 東京都
投稿日時: 2009-02-18 10:00
シリアライズ/デシリアライズよりも、Stream#Readについてということだと思いますが、

コード:
//先ほど文字列だと(21)と受信した場合には、2がLengthでLength分取得できない。 
//次の受信で(0)と受信した場合は前回受信分の21に0をつけて、10がデータとなる


↑の原理が良く分かりませんが、

コード:
st.Read(buffer, 0, bufferLen)


bufferに読み込んだものをつなげて、デシリアライズして下さい。
未記入
会議室デビュー日: 2009/02/04
投稿数: 8
投稿日時: 2009-02-18 10:15
turutosiyaさん

bufferに読み込んだものを繋げてデシリアライズすると動作します。
全てを読み終えた後に処理する場合です。

細切れで送られてくるデータを順次処理したいのです。
その際に細切れデータがクラスサイズ分あるかを判断したいのです。
Marshal.SizeOfやSizeOfなどでもうまくいかなくて。
turutosiya
常連さん
会議室デビュー日: 2003/06/10
投稿数: 49
お住まい・勤務地: 東京都
投稿日時: 2009-02-18 10:25
順次処理をするならば、シリアライズしないほうが良いかと思います。
すべてデータが揃わないと、デシリアライズできないので。
まりも
ベテラン
会議室デビュー日: 2006/08/19
投稿数: 77
投稿日時: 2009-02-18 23:48
ストリームを送るとかはやったことがないですが。

シリアライズした文字列の長さは内容によって変わってくるので、
長さで判断するのは無理じゃないでしょうか?

受信した文字列を調べて、
タグが全部閉じているかどうかを調べるとか、
そういうことになるように思えます。
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-02-19 09:38
Byteのコレクションに1Byteずつ受信したものを代入し、代入するたびにコレクションからByte配列を取得or生成→デシリアライズを行い、例外が起きないときを受信が完了したと判断する。例外が発生する限りは受信中。っていうロジックも考えられますが、あまりお勧めはできません。

データの送受信のフォーマットをきちんと決めたほうが、幸せになれると思います。

スキルアップ/キャリアアップ(JOB@IT)