問題タブ [bytearrayinputstream]
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 - ByteArrayInputStream を取得し、その内容をファイルシステムにファイルとして保存するにはどうすればよいですか
ByteArrayInputStream の形式の画像があります。これを取得して、ファイルシステム内の場所に保存できるようにしたいと考えています。
ぐるぐる回っていますが、助けていただけませんか。
java - ヘルプ!ByteArrayInputStream 使用時の予期しない java.lang.ArrayIndexOutOfBoundsException
ByteArrayInputStream を使用すると、java.lang.ArrayIndexOutOfBoundsException が発生します。
まず、ZipInputStream を使用して zip ファイルを読み取り、zipEntries をループしながら、ByteArrayInputStream を使用して、ZipInputStream.read(byte[] b) と ByteArrayInputStream(byte[] b) を使用して各 zipEntry のデータをキャプチャします。メソッド。
最後に、6 つの異なる zipEntries からのデータを含む合計 6 つの異なる ByteArrayInputStream オブジェクトがあります。次に、OpenCSV を使用して、それぞれの ByteArrayInputStream を読み取ります。
バイト サイズが 2000 未満の 6 つの ByteArrayInputStream オブジェクトのうち 4 つを問題なく読み取ることができます。
他の 2 つの ByteArrayInputStream オブジェクトのバイト サイズはそれぞれ 2155 と 4010 で、CSVreader はこれら 2 つのオブジェクトの一部しか読み取ることができず、java.lang.ArrayIndexOutOfBoundsException を返します。
これは、ZipInputStream をループするために使用したコードです。
以下は、ZipInputStream から ByteArrayInputStream にデータをコピーするために使用するコードです。
2 セットの openCSV コードは、その例外をスローする前に数行のデータを読み取ることができるため、問題の原因は byteArray であると思われます。この問題を回避するためにできることはありますか? Google App Engine と Tomcat サーバーの両方にデプロイしているため、Web アプリに一時ファイルを保存せずに、zip ファイルを受け入れるアプリケーションを作成しようとしています。
修理済み!!!stephen C のおかげで、read(byte[]) がすべてを読み取らないことに気付いたので、copyInputStream が完全に機能するようにコードを調整しました。
java - ByteArrayInputStream はバイト配列をコピーしませんか?
ByteArrayInputStream のドキュメントには次のように書かれています。
java.io.ByteArrayInputStream.ByteArrayInputStream(byte[] buf) buf をバッファ配列として使用するように ByteArrayInputStream を作成します。バッファ配列はコピーされません。pos の初期値は 0、count の初期値は buf の長さです。パラメータ: buf 入力バッファ。
以下のコードを実行すると、
私が得た出力は、テストに使用された文字列ではなく、10 バイトの空の配列に基づいています。これは、ByteArrayInputStream のコンストラクターが、渡されたバイト配列への参照を格納するのではなく、バイト配列をコピーする必要があることを示しています。これはドキュメントと矛盾しています。バイト配列がコピーされているかどうか、誰かが私の理解を明確にすることができますか?(コピーされていない場合、出力がバイト配列 b の状態を反映しないのはなぜですか?
mysql - BLOB を MySQL データベースに保存する
次のような場所のサーバーに画像をアップロードしました:opt/glassfish/domains/domain1/applications/j2ee-modules/SmartbadgePortal/images/2badge.jpg
画像情報ではなく、画像の内容を読み取ろうとしています。私はたくさん検索し、次の解決策を得ることができました:
ただし、 System.out を使用して「画像」を印刷したとき。私は得る:
画像の内容は* : BufferedImage@10d7a81: type = 5 ColorModel: #pixelBits = 24 numComponents = 3 色空間 = java.awt.color.ICC_ColorSpace@722270 透明度 = 1 アルファあり = false isAlphaPre = false ByteInterleavedRaster: 幅 = 418 高さ = 387 #numDataElements 3 dataOff[0] = 2|#]
しかし、これは私が必要とするものではありません。画像の内容が必要で、MySQL の BLOB 列に保存する必要があります。ByteArrayInputStream などのさまざまな方法を試しているので助けてください。ただし、画像自体ではなく、この情報のみが表示されるたびに。
java - 効率的なByteArrayInputStream操作
ByteArrayInputStream
要素のコンテンツとして大きなbase64でエンコードされた文字列を持つ1つの要素で構成されるXMLドキュメントを含むを使用しています。テキストをデコードしてPDFドキュメントとして出力できるように、周囲のタグを削除する必要があります。
これを行うための最も効率的な方法は何ですか?
私のひざまずく反応は、ストリームをbyte
配列に読み込み、開始タグの終わりを見つけ、終了タグの始まりを見つけてから、中央の部分を別のbyte
配列にコピーすることです。しかし、これはかなり非効率的で、私が扱っているテキストは時々大きくなる可能性があります(128KB)。byte
余分な配列なしでこれを行う方法が欲しいです。
java - FilterInputStream をサブクラス化して、ByteArrayInputStream 内の一連の数値をフィルタリングします
FilterInputStream
のメソッドの一部をオーバーロードする のサブクラスを作成したいと思いFilterInputStream
ます。これは、ユーザーが指定した一連の数字 (このシーケンスの長さはわかりません) である入力ストリームをフィルター処理し、連続して指定されたすべての数字が1 回だけ書き込まれます。
たとえば、入力が与えられた場合
出力は
オーバーロードする必要があるクラスとそうでないクラスを教えてください。インスタンス変数が必要なのか、コンストラクタだけが必要なのかわかりません。orByteArryInputStream
ではなく、また使用する必要があります。Reader
Writer
java - ソケットから ByteArrayInputStream を使用して byte[] を受け取る
コードは次のとおりですが、エラーが発生しました:
ソケットからの受信byte[]
は可能ですか?ByteArrayInputStream
java - JavaのファイルからByteArrayInputStreamを作成するにはどうすればよいですか?
ZIP、RAR、txt、CSV、docなどのファイルがあります。そこからByteArrayInputStreamを作成したいと思います。ApacheCommonsNet
からFTPClientを
介してFTPにファイルをアップロードするために使用しています。
誰かがそれを行う方法を知っていますか?
例えば:
私のコード:
java - Java BufferedReader.readLine() は EOL を待っていませんか?
ここに明らかな何かが欠けている場合は申し訳ありません...しかし、このコードスニペットを見てください:
有効な EOL を検出する前に BufferedReader が EOF に遭遇すると思っていたので、これは "readString: null" を出力すると予想していましたが、代わりに "readString: O hai world" を出力しました。これは、 BufferedReader の Javadocs が readLine() が行うと言っていることとは反対のようです。
1 行のテキストを読み取ります。行は、ライン フィード ('\n')、キャリッジ リターン ('\r')、またはキャリッジ リターンの直後のラインフィードのいずれかによって終了すると見なされます。
戻り値: 行終了文字を含まない、行の内容を含む文字列、またはストリームの末尾に到達した場合は null
文字列が '\n' や '\r' で終了するように再解釈される理由がわかりません...誰か教えてください。ありがとう!
編集: いくつかのコンテキストを提供するために、System.in で読み取るように設計された、私が作成した Reader クラスを検証する JUnit テストを作成しようとしています。ByteArrayInputStreams を使用することは、System.in をシミュレートする合理的な方法のように思えました (この関連する SO 投稿を参照してください)。
Reader が行をキャプチャするとき、現在は BufferedReader.readLine() に依存しています。私の目的のために、リーダーの行はすべて「\n」または「\r」で終了している必要があります。EOL なしで EOF に遭遇すると、有効な行に解決されません。したがって、この時点での私の質問は次のとおりだと思います(時間があるときに自分でこれらをさらに詳しくテストしようとしますが、賢い人々が私を助けてくれることを願っています):
- BufferedReader.readLine() は壊れていますか、文書化されていませんか? または、バイト配列が使い果たされたときに、ByteArrayInputStream は何か間違ったものを返していますか?
- Reader をテストするこの方法は間違っていますか? また、System.in に対して使用したときに readLine() が正しく機能することを期待する必要がありますか? 私は、これに対する答えは「はい」であると信じたいと思っています。
- 単体テストのために System.in をシミュレートするより良い方法はありますか?
- InputStream から読み取るときに '\n' と '\r' を厳密に区別する必要がある場合、独自の readLine() メソッドを作成したほうがよいでしょうか? もしこれが本当なら、私は非常に驚くだろう。
再度、感謝します!