問題タブ [binaryreader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows-phone-7 - BinaryReader.Read は、接続が失われたときに IOException をスローしません。
HttpWebResponse.BeginGetResponse() メソッドを使用して、サーバーにリクエストを送信します。データがバッファリングされないように、要求では AllowReadStreamBuffering がfalseに設定されています。「リクエスト完了」通知で、次のことを行います (エラー処理コードは含まれていません)。
私の問題は、ストリームからのデータの読み取り中 (while ループ中) に接続エラーを検出できないことです。動作は非常に奇妙です。OS がキャッシュに保持しているすべてのデータの読み取りを終了し、「ストリームの終わり」の場合と同様に「readSize = 0」を返します。streamReader.Read() が IOException 例外をスローすることを期待していましたが、そうではありません! どこかにストリーム失敗フラグを見つけようとしましたが、ないようです (Stream/BinaryReader/HttpWebResponse)。助けてください!
3 つのシナリオを使用してこれをテストしたところ、すべて同じ動作でした。
- 電話機から PC への USB 接続の使用
- PC の USB 接続を使用してインターネットに接続された電話機
- streamReader.Read() 呼び出しが数回成功した後、PC ネットワーク カードを無効にします。
- WIFI接続の使用
- WIFI接続を使用してインターネットに接続された電話
- いくつかの streamReader.Read() 呼び出しが成功した後、WIFI ルーターの電源をオフにします
- WIFI接続の使用
- WIFI接続を使用してインターネットに接続された電話
- streamReader.Read() の呼び出しが数回成功した後、WAN ケーブルを取り外します (そのため、インターネットにアクセスできません)。
ありがとうございました!ミハイ
c# - BinaryReaderを介してバイト配列を文字列に解凍すると、空の文字列が生成されます
バイト配列を解凍し、バイナリリーダーを使用して文字列に変換しようとしています。次のコードを実行すると、inStreamの位置が0から配列の長さに変わりますが、strは常に空の文字列です。
c# - BinaryReader.PeekChar() は何ビットを読み取りますか?
を使用するストリーム リーダー クラスの改善に取り組んでいますBinaryReader
。.PeekChar()
これは、処理を続行するためにさらにデータが存在するかどうかを確認するために使用する while ループで構成されています。
最初の操作は、.ReadInt32()
4 バイトを読み取る a です。PeekChar
1 バイト (または 1 ビット) だけを "見た"としたら? これは、EOF をチェックする信頼できる方法とは思えません。
はBinaryReader
、デフォルトのパラメーターを使用して構築されており、私が理解しているように、デフォルトのエンコーディングとして UTF8 を使用しています。8ビットを.PeekChar()
チェックすると思いますが、よくわかりません。
何ビット.PeekChar()
を探しますか? (そして、EOFをチェックするための代替方法は何ですか?)
c# - BinaryReader.ReadInt32 の結果が入力ファイルと比較して予期しないものになるのはなぜですか?
特定の操作に困惑していBinaryReader
ます。
16 進エディタ (UltraEdit) でバイナリ ファイルを表示すると、最初の 4 バイトは次のようになり52 62 38 11
ます。
を使用して同じファイルを反復処理するBinaryReader
場合、最初に呼び出した場合ReadInt32()
、int 値は 1,382,168,593 であると予想されます。
.ReadInt32()
: 現在のストリームから 4 バイトの符号付き整数を読み取り、ストリームの現在位置を 4 バイト進めます。
代わりに、288,907,858 を取得します。
明らかに、明らかな何かが欠けています...何が起こっているのか誰か説明できますか?
c# - BinaryWriter の問題 - 「コードは Write() メソッドの間にバイトを追加します」
BinaryWriter と Then BinaryReader を使用してコードを実行しようとしています。書きたいときは、メソッド Write() を使用します。しかし、問題は、Write メソッドの 2 行の間に、10 進数の 31 (24 の場合もある) の ASCII テーブルにある新しいバイトが現れることです。この画像でそれを見ることができます:
インデックス 4 のバイト (5 番目のバイト) が ASCII 10 進値 31 であることがわかります。そこには挿入しませんでした。ご覧のとおり、最初の 4 バイトは数値 (Int32) 用に予約されており、次は他のデータです (主に一部のテキスト - これは重要ではありません)。
コードからわかるように、私は次のように書いています。
5 番目のバイト (12 月 31 日) が間に入ったのはどうしてですか??
そして、これは私が持っているコードです:
.net - Delphi Prism:BinaryWriterの「Writeメソッド」はDelphiのWritelnメソッドと同じように機能しますか?
私はDelphiPrismを使用しており、次のようにBinaryWriterを使用してバイナリファイルを作成および書き込みています。
あなたへの私の質問はこれです。writeメソッドは、改行またはキャリッジリターンを使用せずに、行ごとに行を書き込むか、バイトごとにバイトを書き込むか、文字を次々に書き込みますか?
私がこの質問をしている理由は、文字の配列のような特定の文字数なしで文字列を読み書きすることに関して私が混乱しているからです。
例えば:
それが私のプログラムを書いた方法であり、それはうまくいくようですが、私が言ったように私は混乱しています。
文字列データ型の場合、読み取りまたは書き込みに特定の長さの数値を指定せずに、読み取りまたは書き込みに使用するバイト数または文字数をどのように知ることができますか?
c# - ネットワーク ソケット上の C# BinaryReader.ReadString
サーバー/クライアント アプリがあります。
どちらも通信時に BinaryReader/Writer を使用します。
クライアントとサーバーがメッセージを迅速に交換している場合、特定の秒に多くのメッセージが送信され、ほとんどの場合 (常にではありませんが) サーバーをシャットダウンします (組み込みコマンドを使用して、正常なシャットダウンを行います)。クライアントの BinaryReader.ReadString() メソッドは、 EndOfStreamException、これで問題ありません。私が理解できないのは、この例外が TcpClient.Connected プロパティを「false」に変更しないのはなぜですか?
これは無限にループします。ネットワークの読み取り/書き込みが失敗すると、Connected プロパティが変更されると思いました。BinaryReader が例外をスローしている場合、正常に読み取られていませんか?
BinaryWriter.Write() をスローすると、Connected プロパティが「false」に変更されるため、無限ループが壊れます。
関連する質問ですが、EndOfStreamException は常にネットワーク接続の切断を示していますか、それとも一時的な問題を意味している可能性がありますか?
c# - BinaryReaderをC#でストリームに変換する方法は?
「.bin」ファイルを完全に読み取り、ストリームを関数に渡す必要があります。バイトごとに値を読み取るために正常に機能するBinaryReaderで試してみました。ファイル全体を文字列ストリームとして関数に渡したいのですが、StreamReaderを使用すると、ガベージ情報が得られます。StreamReaderがbinファイルを正しく読み取れないようです。
前もって感謝します。
c# - BinaryReaderを使用してデータをファイルに正しく入力するにはどうすればよいですか?
私は宿題をしているのですが、完全に行き詰まっています!私がやろうとしているのは、すでに定義されている入力を使用し、saveDataTo()メソッドを使用してファイルに保存し、readDataFrom()メソッドを使用して入力を読み取ることです。
私は最初の部分で立ち往生しています。最初にProgram.csファイルのデータを初期化する必要があるかどうかわかりませんか?
わからない、行き詰まっている。ここにコードがあり、これを達成するためのヒントを期待しています。
- 編集 -
saveDataTo()メソッドとreadDataFrom()メソッドの両方の目的で命令を追加できます。
saveDataTo()メソッドはBinaryWriterのパラメーターを取ります。このメソッドは、ブックオブジェクトの5つのプロパティすべての値を、ライターに関連付けられたファイルストリームに書き込みます(関連付けは、ProgramクラスのMain()メソッドで行われます)。このメソッド内でファイルストリームとバイナリライターを開いたり閉じたりする必要はありません。
readDataFrom()メソッドはBinaryReaderのパラメーターを取ります。このメソッドは、リーダーに関連付けられたファイルストリームからBookオブジェクトの5つのプロパティすべての値を読み取ります(関連付けはProgramクラスのMain()メソッドで行われます)。このメソッド内でファイルストリームとバイナリリーダーを開いたり閉じたりする必要はありません。
それで、ファイルに保存するプロパティを使用して割り当てる必要があるという手がかりが得られますか?
- 編集 -
そこでコードを更新しました。ファイルに保存されているコンテンツに問題があります。価格は表示されていません。何故ですか?
Program.cs
Publication.cs
Book.cs
よろしく。
HelpNeeder。