問題タブ [nsinputstream]
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.
ios - NSInputStream と NSOutputStream の問題
ネットワーク経由で相互に接続されているデバイス間で2 つがNSInputStream
あります。NSOutputStream
に何かを書き込むと、イベントが発生するoutput stream
までデータが書き込まれ ます。NSStreamEventEndEncountered
出力ストリームを閉じますが、反対側 ( input stream
) ではNSStreamEventEndEncountered
、 のビュー コントローラーを終了するまで、イベントは発生しませんoutput stream
。1.で同じことが発生した後でも、 でイベントが発生
しないのはなぜですか? (このイベントでは、出力ストリームも閉じられます)
2. を一度開くと、データを書き込むことができるのは 1 回だけであると理解しています。イベント後に再度開くことはできません (たとえば、イベントに何か新しいものを書き込むため)。NSStreamEventEndEncountered
input stream
output stream
NSOutputStream
output stream
NSStreamEventEndEncountered
ios - NSInputStream/NSOutputStream を介して複数の画像を転送する
私は2つ持っておりNSInputStream
、NSOutputStream
ネットワーク経由で互いに接続しています。コア データ オブジェクトと関連するイメージをあるデバイスから別のデバイスに転送したいと考えています。JSON
コア データ オブジェクトをストリームの反対側に正常に変換して転送し、 JSON
. これで、記録されたそれぞれに関連付けられた画像があります。画像はディスク上にあり、コアデータオブジェクトに保存されているパスのみがあります。に書き込むときは、完全なデータを手元に用意する必要がありますoutput stream
。(をXML
含むJSON
) を用意しました。
1. しかし、どうすれば画像 ( ) を(また)NSData *
と一緒に転送できますか? 読み取り側 ( ) で XML と画像を区別するにはどうすればよいですか?XML
NSData *
NSInputStream
2. また、複数の画像を転送する必要がNSInputStream
あります。画像のバイトが終了し、次の画像のバイトが開始したことを最後にどのように伝えますか?
3. どの画像 (名前) が転送されたかをどのように知ることができますか?
ありがとう
ios - UTF-8でNSInputStreamを読み取る方法は?
NSInputStreamを使用してiOSで大きなファイルを読み取ろうとすると、ファイルの行が改行で区切られます(メモリを大量に使用するため、使用したくありませんcomponentsSeparatedByCharactersInSet
)。
ただし、すべての行がUTF-8でエンコードされているわけではないため(ASCII、同じバイトとして表示される可能性があるため)、Incorrect NSStringEncoding value 0x0000 detected. Assuming NSASCIIStringEncoding. Will stop this compatiblity mapping behavior in the near future.
警告が表示されることがよくあります。
私の質問は次のとおりです。たとえば、コンパイラフラグを設定することで、この警告を抑制する方法はありますか?
さらに:バイトストリームからの読み取りとして、2つのバッファー読み取りを追加/連結し、バッファーを文字列に変換してから文字列を追加すると、文字列が破損する可能性があるため、保存できますか?
以下のメソッド例では、バイトから文字列への変換で、UTF-8文字の前半と後半が無効として破棄されることを示しています。
出力:
ios - NSInputStream が実行を停止し、EXC_BAD_ACCESS をスローすることがあります
(更新)これは一言で言えば問題です: iOS では、大きなファイルを読み取り、その上で何らかの処理を行いたい (この特定のケースでは、Base64 string() としてエンコードし、デバイス上の一時ファイルに保存します。セットアップしますファイルから読み込む NSInputStream
私はほとんどの仕事をしています。何らかの理由で、NSInputStream が機能しなくなることがあります。線があるからわかる
の初めに(void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
、時には出力が表示されるだけです
(これはイベント NSStreamEventHasBytesAvailable に対応します)、その後は何もありません。NSStreamEventEndEncountered に対応するイベント 10 ではなく、エラー イベントでもありません。また、時にはデバッグ方法がわからない EXC_BAD_ACCESS 例外が発生することもあります。どんな助けでも大歓迎です。
これが実装です。「送信」ボタンを押すとすべてが開始され、トリガーされます。
sendData は次のとおりです。
上記で呼び出された setUpStreamsForInputFile は次のとおりです。
最後に、これはほとんどのロジックが発生する場所です。
注: これを最初に投稿したとき、この問題は GCD の使用に関係していると誤解していました。以下のRobの回答に従って、GCDコードを削除しましたが、問題は解決しません。
ios - バッファー転送に GCDAsyncSocket を使用しようとしています
(更新) 大きなファイル (ビデオまたは写真) を読み込んで、SOAP リクエスト経由でリモート サーバーに送信しようとしています。データを Base64 文字列としてエンコードする必要があります。私は次のようにこれをやろうとしています:
base64 でエンコードされたデータを「回避」する SOAP リクエスト用のテンプレート xml を作成します。
SOAP xml の最初の部分をバッファにプッシュする
ビデオ ファイルを開いてチャンクにエンコードし、エンコードされた各チャンクをバッファにプッシュします。
最後に、SOAP xml の 2 番目の部分をプッシュします。
上記のようにパーツを「キューに入れる」ことができるようにするために、バッファリング機能を備えた GCDAsyncSocket を使用しようとしています。GCDAsyncSocket は TCP レベルで動作するため、HTTP POST ヘッダーを自分で記述する必要があると考えています。そのため、漠然としか理解していない可動部分が多くあり、すべて間違っている可能性があります。しかし、ソケットが離陸することさえないようで、デバッグする方法さえわかりません。これが私の関連するコードです。明らかなエラーを見つけるかどうかを確認してください。
ソケットは常に正常に接続されているようです。これは、このデリゲート メソッドを使用して確認できます。
setUpStreamsForInputFile メソッド (上記の最初のコード リストで呼び出されます):
ここで、前のメソッドの NSInputStream セットアップは、このデリゲートにイベントを送信します。
ソケットは、このデリゲートを使用してログに出力することになっています
しかし、これは一種のランダムに発生します。たとえば、最初の 2 つの if が呼び出される場合と呼び出されない場合があります。私がそうして、3番目の「if」(実際にエンコードされたデータを書き込んでいる場所)に到達すると、それは2〜3回しか書き込まれず、それだけです-ファイルのサイズを考えると、数が少なすぎると思います. SOAP xml の最後の部分を書き込む必要がある最後の「if」に到達することはありません。助けていただければ幸いです!前もって感謝します。
さらなる更新 (2013 年 3 月 19 日)
今日ソケットをテストすると、書き込みイベントがまったく発生しなくなりました。これは、ランダムであり、ひどく間違ったことをしていることを示しています。今日、接続は開きますが、次のデリゲート メソッドで確認できるように、ある時点でタイムアウトになります。
返す
socketDidDisconnect:withError: "Error Domain=NSPOSIXErrorDomain Code=60 "Operation timed out" UserInfo=0x1cd89b00 {NSLocalizedFailureReason=connect() 関数のエラー、NSLocalizedDescription=Operation timed out}"
上記のストリームデリゲートで Base64 データの書き込みをまだ実行している間。
objective-c - データを取得しているかどうかの NSSreamstatus
私は NSInputStream を持っています。他端からデータを取得しているかどうかを確認したいのですが、NSStreamStatus を読んで、「NSStreamStatusReading」を使用して読み取りデータを確認しています。
そのステータスを確認しようとしましたが、機能していません.データを取得しているかどうかを確認する方法を教えてください..コード:
}
送信時に機能しますが、サーバーを停止すると更新されません。
ios - ローカルファイルパスからデータの特定の部分をアップロードするための NSInputStream のサブクラス化
1 つのファイルに 100 MB のデータがあります。この 100 mb のデータは仮想的に分割されます。つまり、異なる 5MB チャンクを指す NSInputStream を作成する必要があります。これは、NSData でストリームを作成することで可能になります。
しかし、むしろ、ファイル内のデータの範囲を指す NSInputStream を持つことができるかどうか知りたいですか?
ios - NSInputStream - NSMutable データ追加を使用せずにデータを追加する
NSMutable データ追加を使用せずに NSInputStream にデータを追加したい。
それは可能ですか?
ガイドしてください