問題タブ [datainputstream]
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.
java - Java プリミティブ データ型 byte およびクラス Byte
背景: ソケットを介して非常に限られた範囲で情報を渡す割り当てがあります。メッセージごとに最大 10 バイトになる可能性があり、送信するのは 1 バイトだけだと考えていました (プロトコルで 256 の異なる状態を通知するには 1 バイトで十分なので)。今、私はこれに関する情報を探して掘り下げ始め、多くの質問に出くわしました. 私の仮定が間違っているところを修正し、可能であれば文字通りの質問に答えてください.
つまり、プリミティブ データ型のバイトがあります (これは基本的に -128 から 127 までの数値ですよね?)。私が使用する場合
...コンソールに正しい数値が出力されますが、制限外の値を割り当てようとすると、コンパイラーが文句を言います。
次に、Byte データ型 (または API で言うように int) から明らかに Byte オブジェクトを作成するクラス Byte があります。
これも期待どおりの結果を生成し、コンソールに 20 が出力されます。127 よりも大きい数値を使用しようとすると、コンパイラからエラーが発生します。
1. データ型 byte とクラス Byte の違いは何ですか? クラス Integer が型 int に対して行うように、クラスが多くのメソッドを提供することが主な理由ですか?
次のスニペットは、奇妙な結果を生成します (私にとって):
2. 入力が読み取られ、入力が 10 進数形式の ASCII 文字 (たとえば、1 は 49 を返す) として解釈され、その後に数字 13 と 10 の 2 つの行が続きます。これはなぜですか?
(d をバイトとして宣言するかバイトとして宣言するかは関係ありません。結果は同じであり、代わりにバイト b から値を取得するなどと混ぜましたが、これらの 3 行 (またはそれ以上) は常に結果です。そして私が欲しいのは、私に戻ってくる入力だけです)
基本的に私はこれに少し混乱していますが、最終的には、これらの単一バイトを送信するための合理的な方法が必要であり、34 を送信するときに、反対側に 34 を受信させたいだけです。
3. クラス Byte の使用を控え、ストリームを介してバイト型を送信したいとします。すべての通常のストリームとリーダーは int 以外のものを読み取っていないようです (これは、少なくとも 2 バイトの入力があるまでブロックすることを意味すると思いますが、1 つだけを送信します)。強制的に使用する必要がDataInputStream
あり DataOutputStream
、型バイトをオブジェクト Byte にラップする必要がある場所、または他の方法がありますか?
これらすべてのことから、オブジェクト Byte が実際には 1 バイトのデータに過ぎず、それ以上のものではないことを信頼できるかどうか疑問に思っています... 混乱しています :(
前もって感謝します!
java - Java: InputStreams と OutputStreams が共有されている
またはを共有できますInputStream
かOutputStream
?
たとえば、私が最初に持っているとしましょう:
...incoming
オブジェクト変数です。後で私は一時的に行います:
ストリームは具体的であり、ストリームからの読み取りは、どこから行われたかに関係なく、その入力を消費することを理解しています...しかし、上記を実行した後でも、両方incoming
にdataReader
同時にアクセスできますか、または1 つのInputStream
オブジェクトに接続されているだけで、そのため、そのストリームがincoming
失われます宣言したら入力しdataReader
ますか?を閉じるとソケットも閉じることは理解していますが、これは控えますが、に「転送」した後、何らかの形でdataReader
「回収」する必要があるかどうか疑問に思っています。私はしなければなりませんか:InputStream
incoming
dataReader
この操作全体の後、もう一度?
java - Java を使用して、テキスト ファイル内の特定の行数を読み取る
データを含むテキスト ファイルがあります。ファイルにはすべての月の情報が含まれています。1 月の情報が 50 行を占めているとします。2 月が始まり、さらに 40 行を占有します。3 月などがあるより... ファイルの一部だけを読み取ることはできますか? 「X 行目から Y 行目まで読んでください」と言えますか? またはこれを達成するためのより良い方法はありますか?全ファイルではなく、1ヶ月分のデータのみを印刷したい。これが私のコードです
お時間をいただきありがとうございます。
android - 「su」を使用して実行時にコマンドを送信し、DataInputStream からすべての行を取得する方法
Xlocation で Android デバイスにあるものを特定できるようにする必要があるプログラムに取り組んでいます。「su ls Xlocation」を使用しています
ファイルの配列リストを取得したいのですが、最初の項目しか取得できません。次の行を取得するコマンドがありませんか? または、他に何かする必要がありますか。
以下は私が送信している私のコマンドです
以下はdoCommandの現在の方法です
現在見られるように、true または false のみを返します。ただし、デバッグで実行すると、出力の最初の項目しか取得できません。(出力 = "[first.apk")
新しいバージョンを編集。
現在、かなりの量の出力が得られていますが、チェックしたバイト[10000]のサイズ制限内の大きなアイテムがディレクトリにあるすべてではありません。
誰かがこれを改善して、うまくいく正確な答えを得たいと思っているなら、私はまだこの投稿をチェックしています.
ありがとう
java - IOException の場合にストリームを閉じる DataInputStream
すべての例で、誰もが次のようなコードを見つけることができます:
このコードがFileNotFound
例外に遭遇したとき、inputStream
開いていなかったので、閉じる必要はありません。
しかし、なぜIOException
その catch ブロックで mets が表示されないのですかinputStream.close()
。この操作は、入力データの例外がスローされたときに自動的に実行されましたか? プログラムが入力に問題がある場合、これはストリームがすでに開いていることを意味するためです。
android - ソケットを介して ByteArray を送受信中にアプリがクラッシュする
ソケット通信を使った簡単なチャットアプリを作ろうとしています。私の目標は、テキストと画像 (スマートフォン ギャラリーから) を正常に送受信することです。テキスト部分は成功しましたが、画像に問題があります。
dataInput/OutputStream を使用してコードを作成しました。以下は、bytearray を使用して画像転送用のソケット接続を確立するコードです (アプリはテキストと画像に異なるポートを使用します)。
while ループは、サーバーからの入力 bytearray を待機することです。ハンドラーは、デコードされた bytearray をディスプレイに表示します。
--> img_input.readFully(byte_input); この行が問題になると思います。ハンドラーが正常に動作することを確認しました。空の while ブロックを使用しても、アプリは停止しませんでした。
問題は何でしょうか?
サーバー側のコードを以下に示します。 (メッセージスレッドは省略)
java - System.inでのJavaDataInputStreamの使用
簡単なプログラム
やや奇妙な動作をします。入力されたテキストの出力を拒否します...端末を使用してテキストを入力しましたが、出力には何もありません。どうしたの?
java - Javaは16進数を逆にします
私はそのようなファイルを読み取ろうとしています:
と
今、私はそのような16進数を読みたいです:
必要な方へ: これが私のファイルの最初のバイトです
3412 aa55 0200 0000
問題は、私の出力0x3412aa55
が0x55aa1234
. これを修正するにはどうすればよいですか?
android - ローカルテキストファイルを1行ずつ文字列配列に読み込むことはできますか?
質問「ローカル(res / raw)ファイルを1行ずつ読み取る方法は?」同様の問題を扱っていますが、そこで提供された回答に基づいてソリューションベースを構築することができませんでした。私は非常に有用な情報(readLineメソッドを持つDataInputStreamクラス)を取得しました。これを開発者のWebサイトで調査し、機能させるように努めています。
私がやろうとしているのは、テキストファイルの連続する行に格納されている情報を文字列配列に読み込むことです。最初の行は最初の配列要素、2番目の行は次の配列要素などです。次にこの文字列配列は、次に開かれるアクティビティのテキストフィールドに入力するために使用されます。これはすべてスイッチケース内で発生します(ケースに応じて、つまりどのリストアイテムが選択されているかによって、異なるテキストファイルがロードされます)。これが私がこれまでに持っているものです:
これまでのところ、編集者はこれらのエラーを除いてそれで大丈夫です、そして私はそれらを理解するのに十分な経験がありません。私は彼らが言っていることを理解していますが、それらを修正する方法は理解していません。エラーは、入力ストリームを設定して値を割り当てようとしているスイッチケース内のセクションにあります。最も重要なことは、readLineコマンドが実行される行で、次のようになります。"-メソッドreadLineはタイプDataInputStreamに対して未定義です""-メソッドreadLineはタイプInputStreamに対して未定義です"
私が間違っていなければ、ここ(http://developer.android.com/reference/java/io/DataInputStream.html)にDataInputStreamクラスでreadLineメソッドが使用可能であると書かれているので(私はこれは上記の質問から)。明らかに、私はDataInputStreamを正しく使用していませんが、その方法を理解できないようです。私はここでいくつかの質問に目を通し、上記のリンク先のページを数回参照しました。
誰かが私が間違っていることを見ることができれば、私はあなたの助けを大いに感謝します。この種のタスクで間違ったツリーを完全に吠えている場合は、時間を無駄にしていることをお詫びしますが、いくつかのガイドラインまたは適切なチュートリアルリソースへの紹介をいただければ幸いです。私はこれらのエラーを理解するために過去2日間を費やしました。
c# - C# <-> Java ソケット通信
ソケットを介して Java アプリケーションと通信することになっている .NET アプリケーションを作成しています。.NET コードは次のとおりです。
問題は、Java アプリケーションが応答を送信しないことです。アプリケーションはサードパーティのソフトウェアであり、変更できませんが、逆コンパイラをダウンロードして、Java クラスで関連するコードを見つけました。
この場合の「is」は DataInputStream です。1. ソケットを作成し、メッセージを送信します 2. 応答を待ちますが、何も起こりません 3. アプリを手動で閉じます - ソケットが期限切れになります 4. 突然、メッセージ全体が Java アプリケーションのログに表示されます. これは、例外が発生し、実際に体に何かがあることを意味します。
エラーの可能性がある場所を教えていただけないでしょうか。this.is.readFully(body) 行はそこにあるべきではないと思いますが、よくわかりません。C# コードから EOF を手動で送信する必要があるかもしれませんが、その方法を見つけることができませんでした。
このコードのもう 1 つの小さな問題は、メッセージの最初の 2 文字が取り除かれていることです。そのため、実際のメッセージの前に 2 つのスペースを含めました。
前もって感謝します。
編集
だから私はいくつかのランダムなデータでソケットを埋めようとしましたが、最終的に答えを得ました:
ただし、送信するメッセージは正確でなければならないため、これは良い解決策ではありません。次に、関連データが送信された後にソケットを閉じようとしましたsoc.Disconnect(false);
。これにより、Java アプリケーションのログが適切なデバッグ情報でいっぱいになります。EOL をソケットに送信して、Java アプリがリッスンを停止し、データの送信を開始する方法はありますか? ありがとうございました。
編集 2 サーバーに接続する Java クライアントを作成しようとしましたが、同じことが起こりました。
次に、接続しているJavaアプリと同じポートでリッスンするダミーサーバーを作成しました.Javaアプリと同じように動作し、動作していました。
今では、EOT または EOF コマンドをストリームに送信するしか方法がないと感じていますが、.NET でそれを行う方法がわかりませんし、インターネットでも答えを見つけることができませんでした。