問題タブ [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.

0 投票する
2 に答える
455 参照

ios - NSInputStream を使用した NSMutableData 暗号化

CommonCrypto を使用して NSMutableData オブジェクトを暗号化しようとしています (結果のバイトを複製せずにそれ自体にコピーします)。以前は CCCrypt() の「ワンショット」方式を使用していましたが、これは主に単純に思えたからです。データ オブジェクトがメモリ内で複製されていることに気付きました。これを回避するために、バッファ サイズが 2048 バイトの NSInputStream オブジェクトを使用してみました。NSMutableData オブジェクトを読み込んでおり、継続的に CCCryptorUpdate() を呼び出して暗号化を処理しています。問題は、まだ重複しているように見えることです。これが私の現在のコードです(これはNSMutableDataのカテゴリであることに注意してください-主に歴史的な理由のため-したがって、「自己」参照):

ここで明らかな暗号化が間違いなく欠けており、入力ストリームを使用することさえ私には少し新しい..

0 投票する
1 に答える
177 参照

cocoa-touch - 特定の場所で NSInputStream を開始します

入力ストリームがあり、特定の場所でバイトの読み取りを開始したいと考えています。それを行う方法はありますか?ファイル内のバイト1024である location のバイトnを読み取りたいとします。どうすればこれを達成できますか? 私はドキュメントを見てきましたが、これを行う方法はないようです。nnth

0 投票する
1 に答える
1033 参照

swift - NSInputStream を読み取ると、-1 バイトの使用可能エラーが生成されます

NSInputStreamandを使用して簡単なエンコーディングを実行しようとしていますNSOutputStream:

read メソッドからを受け取りました-1。つまり、使用可能なバイトがありません。これはなぜですか?

NSInputStreamまた、初期化子を使用して直接初期化しようとしfileAtPathましたが、同じエラーが発生しました。

0 投票する
1 に答える
11577 参照

swift - SWIFT のみ -- NSInputStream からの読み取り

NSInputStream から適切に読み取る方法を教えてください。

UnsafePointer とは何か、それが何に使用されるのか (UnsafeArray についても) 理解できませんでした。

NSInputStream 読み取り関数は、UnsafePointer オブジェクトで満たすことができる CMutablePointer を取得します。

Java の Streams と比較すると、かなり混乱しています。

あなたは何をお勧めします ?

ありがとうございました!

0 投票する
1 に答える
183 参照

objective-c - URL からの NSInputStream は何も取得していないようです

実行されていることがわかっている次のコードがあります。

私の ReadDelegate クラスは次のよう@interface ReadDelegate : NSObject <NSStreamDelegate>に宣言され、- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode. その特定の関数には、呼び出されているかどうかを確認するための print ステートメントが含まれているだけです。そうではありません。

サーバーが「request\0\0\0」メッセージを受信し、サーバーがファイルを送信しているため、接続が開かれているという事実を知っています(ファイルを正常に受信できる他の環境でテストしています)。

ただし、前述のようにReadDelegate、最初に宣言されたオブジェクト (del) は、streamメッセージを一度も受信しません (ストリームが開いているなど)。

デリゲートが呼び出されないのはなぜですか?

0 投票する
1 に答える
1281 参照

objective-c - NSString を NSInputStream にロードする

Javaでは、次のようなものがあります:

基本的finには、テキスト ファイルの内容で初期化されます。

このJavaコードをobjectiveCに変換しようとしていますが、2行目でそれを行う方法、つまりThread.currentThread().getContextClassLoader().getResourceAsStream(data)objectiveCに相当するものは何ですか?

注:InputStreamデータは文字列変数でグローバルに提供されるため、ファイルを直接読み取ることはできません。

私はobjectiveCが初めてで、これが些細なことで申し訳ありませんが、助けていただければ幸いです。

0 投票する
1 に答える
322 参照

swift - 「NSInputStream」には「setDelegate」という名前のメンバーがありません

AサブクラスでNSStreamDelegateプロトコルを使用し、UIViewController

そして、にsetDelegateメッセージを送信しますNSInputStream

'NSInputStream' does not have a member named 'setDelegate'エラーメッセージが表示されました

以下のドキュメントのように「setDelegate」を使用できるのはなぜですか?

https://developer.apple.com/library/prerelease/iOS/documentation/Cocoa/Reference/Foundation/Classes/NSStream_Class/index.html

0 投票する
0 に答える
569 参照

ios - iOS 入力ストリームは、出力ストリームが同時に送信している場合にのみ高速データを受信します

私の iOS アプリにはソケット通信が必要です。入力ストリームと出力ストリームの設定については、このRay Wenderlich チュートリアルに従っています。私が使用しているサーバーは Twisted です。私のアプリでは、ジャイロスコープ データなどの外部イベントによって生成されたデータの高速バーストを送受信する必要があります。JSON文字列の形式でデータを送受信しています。大部分は、リアルタイム メッセージング チャット アプリに非常によく似ていますが、送受信は非常に高速でバーストです。

したがって、私のアプリのレイアウトは、1 つのビュー コントローラーDViewContorllerと、3 つの tableviewcontrollers を持つ tabbarcontroller があることです。これら 4 つのビュー コントローラーすべてでデータを送受信する必要があるため、App Delegate でソケット ストリームの初期化を実装しました。3 つのタブすべてについて、私の App Delegate は を設定します[self.inputstream setDelegate:self]が、それが にある場合はDViewController、入力ストリームのデリゲートを の参照に設定しますDViewController(void)viewWillDisappearofではDViewController、入力ストリーム デリゲートを AppDelegate の参照にリセットして、入力ストリームの制御を取り戻すようにしました。出力ストリームの場合、デリゲートは常に AppDelegate に設定され、変更されることはありません。

myAppDelegateDViewControllerare<NSStreamDelegate>の両方が実装されています。

すべてのストリーム イベント ケースが実装されています。

したがって、基本的に、セットアップ全体がうまく機能しますが、データが高速でない場合に限ります (または、正確な問題を特定できないようです)。

したがって、テスト中に行ったいくつかの観察結果を次に示します (Simulator-iPhone および iPhone-iPhone セットアップを使用)。

A. シミュレーター - iPhone:

  1. このセットアップでは、シミュレーターから iPhone に送信したい方法とまったく同じ方法でデータを高速に送信できますが、iPhone からシミュレーターには送信できません。iPhone はすべての文字列を適切に受け取り、必要に応じて機能します。

  2. iPhone からシミュレーターに送信すると、シミュレーターは一度に 1 つの JSON 文字列しかデータを読み取ることができず、データが高速に送信されると機能しません。高速で送信すると、シミュレーターが受信するすべての文字列が半分になります (半分だけが受信されます)。注: サーバーは完全な文字列を送受信します。すべての文字列が高速であっても、サーバーに問題はありません。

  3. シミュレーターと iPhone の両方から同時にデータを送信すると、たとえ高速であっても、両方がすべての文字列を適切に受信して処理します。

B. iPhone - iPhone:

  1. いずれかの iPhone (両方ではなくいずれかが送信) は、一度に 1 つの JSON 文字列しかデータを受信できず、データが高速に送信されると両方とも機能しません。高速で送信された場合、いずれかの iPhone で受信される文字列はすべて半分になります (半分だけが受信されます)。注: サーバーは完全な文字列を送受信します。すべての文字列が高速であっても、サーバーに問題はありません。

  2. 両方のiPhoneから同時に同時にデータを送信すると、たとえ高速であっても、両方がすべての文字列を適切に受信して処理します。

これらの観察から、iPhone がすべての高速文字列を受信して​​いるのは、同時にサーバーに何かを送信している場合のみであると私は確信しました。または、シミュレーターが iPhone に送信すると、iPhone は何があってもすべてを受信できるため、完全に間違っている可能性があります。シミュレーターから受け取った文字列がiPhoneによって完全に取り込まれているが、その逆ではないという、シミュレーターの動作の違いを知りたいです。iPhone の送信がシミュレーターよりも速すぎるため、送信されたすべての文字列が受信側に登録されないのでしょうか? 誰か私がこれを解読するのを手伝ってください!

注: いずれの場合も、サーバーは完全に機能し、速度に関係なく、完全な長さのデータを送受信します。そして、私はiOS 7を使用しています。

更新 1:わかりました。1 日 中実験して、ようやく動作するようになりました。問題は、まさに私の質問文です。入力ストリームから継続的かつ高速に受信したい場合、出力ストリームはアイドル状態を維持できません。どうしてこうなったのかわからないので、どなたか教えてください。したがって、私が使用しているクイックフィックスは、入力ストリームでバイトを取得するたびに、すぐに空のデータをサーバーに送信して、出力ストリームをアクティブに保つことです。したがって、入力ストリームは完全なデータを高速に読み取ることができます。しかし、それはサーバー リソースの浪費だと感じています。さらに、信頼できるソリューションではありません。具体的な解決策を探しています。出力ストリームの使用率を気にせずにシミュレーターがそれを行う方法を知りたいです。誰でも助けてもらえますか?

更新 2:以前の更新から学ぶと、空のデータをサーバーに送信することではありませんが、送信者から次の文字列を完全に受信したい場合は、送信者 にダミー データを送信する必要があります。データをすばやく完全に終了/受信したい場合は、ダミー/ブランク データでエンド ツー エンド通信を維持する必要があります。誰もがこの問題を抱えていて、それを行うためのより信頼できる/具体的な方法を見つけましたか?