問題タブ [textreader]
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.
c# - TextReader.Peekの動作とストリーム/リーダーの終了の検出
テキストリーダーを使用している場合、実際にデータの最後にいることを検出するための最良の方法は何ですか?これを行う通常の方法は、次のようなものです。
ただし、ここのmsdnドキュメントには次のように記載されています
次に読み取る文字を表す整数。使用可能な文字がなくなった場合、またはリーダーがシークをサポートしていない場合は-1。
だから私の質問は、あなたが本当にリーダーデータの最後にいるのか、それともリーダー/基になるストリームがここでの戻り値があいまいなように見えるのでシークをサポートしていないのかをどうやって見分けるのですか?たとえば、私が以下を持っている場合
networkstreamはシークをサポートしていないため。
それとも私は何かを逃したことがありますか?
編集:
明確にするために、EoSをチェックできるので、より具体的なStreamReaderクラスを使用してこれを簡単に実装できます。ただし、より一般的なものにするために、私はTextReaderを使用したかったので、StreamReaderだけに縛られることはありません。ただし、Peekのセマンティクスは少し奇妙に思えます。シークがサポートされていない場合にスローしないのはなぜですか。また、この目的のために、TextReaderのEoFプロパティがないのはなぜですか。
c# - TextReader を使用してバイトを読み取る
以前は、BinaryReader を使用して数バイトを読み取っていましたが、最近、次のエラーが発生しました。
そのため、結果として、次のような TextReader の Synchronized メソッドを使用することにしました。
ただし、返される値 (独自の形式で画像をほとんど読み取ります) は正しくありません。「画像」にはわずかに青みがかった色合いがあり、これは TextReader がテキストを読み取る (そして、バイト値を読み取るだけでなく、エンコーディングを使用して文字を読み取る) という事実によって引き起こされる可能性があると感じています。
バイナリ ファイルを読み取るための TextReader の Synchronized() のような「スレッドセーフ」な方法はありますか?
c# - IEumerator はなぜIEnumerable の状態に影響を与える列挙子でさえ最後に達しなかったのですか?
「最後の」割り当てで次のエラー メッセージ (テキスト リーダーのクローズド例外) がスローされる理由が気になります。
ただし、以下は正常に実行されます。
異なる動作の理由は何ですか?
c# - 文字が残っていない場合、stdinからどのように読み取るのですか?
私はScanner
Javaに似た基本的なクラスを書いています。これが私が持っているものです(まあ、関連する部分):
私が実行したいくつかのテストから、これは実際のファイルではうまく機能しますが、stdinでは期待どおりに機能しません。Scanner.Peek
またはを使用するScanner.ReadChar
と、改行が送信された後、TextReader
インスタンスはそれがファイルの最後にあると見なし(私は思う)、EndOfStreamException
それ以降にインスタンスをスローして、this.Reader.Read
をthis.Reader.Peek
返します-1
。
StringReader
真のファイルとインスタンスをサポートしながら、新しい文字を要求するように強制するにはどうすればよいですか?
c# - TextReader を XmlReader に変換する
TextReader
`XmlReader: として使用したい関数があります。
に変換する方法はありTextReader
ますXmlReader
か?
c# - アンマネージ リソースを取得する C# クラス オブジェクトはどれですか? リストはありますか?
XML を使用してクラス オブジェクトをシリアル化および逆シリアル化する作業を行っていたときに、分離ストレージ領域を使用して Windows Phone 7 でそれを行う方法を示すこのブログ投稿に出会いました。Windows Phone 7 は、私が開発しているプラットフォームです。
この例では、明示的にDispose()を呼び出すオブジェクトは TextReader オブジェクトだけです。MSDN で TextReader オブジェクトを調べたところ、ドキュメントに次のように記載されていることがわかりました。
TextReader によって使用されるアンマネージド リソースを解放し、オプションでマネージド リソースを解放します。
したがって、彼がこれを行う理由は、TextReader オブジェクトによって取得された管理されていないリソースをすぐに解放するためだと思います。彼のブログ投稿がなければ、私はこれをやろうとは思わなかったでしょう。明らかに、目に見えるすべてのオブジェクトで Dispose() の呼び出しを開始したくないので、特定のオブジェクトで Dispose() を呼び出す必要があるかどうかを少なくとも調査するための良い経験則は何ですか? 少なくとも、この特別な処理を必要とする一般的な .NET オブジェクトについて、これに関するガイドラインやリストはどこかにありますか?
c# - C# 2Gb ファイルは、Ram では 4GB です。なんで?
ファイルを読み込んでいます(このファイルは、長さが2GBの1つの長い文字列で構成されています)。
これは、ファイルのすべてのコンテンツをメモリに読み取り、文字列と場所を分割する私の関数です: *reader = StreamReader
すべてのデータがリストに配置されると、RAM で 4 GB を占有します。ファイルのサイズがわずか 2 GB の場合、これはどのように可能ですか?
*編集
これが私がやったことです。バイト配列を文字列に変換するのではなく、バイトを操作して渡すだけです。これは、4 GB ではなくメモリ内の 2 GB のみのフィールドでした。
c# - IEnumerable のストリーミング
ファイルから読み取られてフィルター処理されている文字列のリストがあります。これらはすべて、yield メカニズムを使用して行われているため、遅延しています。次に、これを TextReader を受け取るメソッドに渡す必要があります。
この方法に何か問題はありますか?うまくいくようですが、何かを見逃していたことを知りたかったのです。