2

ファイルのバイト配列を作成しました。

    FileInputStream fileInputStream=null;
File file = new File("/home/user/Desktop/myfile.pdf");
    byte[] bFile = new byte[(int) file.length()];
    try {
        fileInputStream = new FileInputStream(file);
    fileInputStream.read(bFile);
    fileInputStream.close();
    }catch(Exception e){
        e.printStackTrace();
    }

今、私はjson入力を期待しているAPIを1つ持っています。そこで、上記のバイト配列を文字列形式で配置する必要があります。バイト配列を文字列形式で読み取った後、再度バイト配列に変換する必要があります。だから、見つけるのを手伝ってください。

1)バイト配列を文字列に変換してから、同じバイト配列に戻す方法は?

4

4 に答える 4

4

byte[] <-> 文字列変換の一般的な問題は、特定のテキストをバイト ストリームに「シリアル化」するために使用された実際の文字セット (エンコーディング)、またはピア コンポーネントが必要とする実際の文字セット (エンコーディング) がわかれば、簡単に解決できます。特定のバイトストリームをテキスト入力として受け入れます-これについてすでに与えられた完全に有効な回答を参照してください。経験豊富なソフトウェア開発者でも、エンタープライズ Java プロジェクトで文字セット (および一般的なテキスト エンコーディング) を理解していないために発生する多くの問題を見てきました。一般に、バイナリ データが何らかの方法でテキストを表す場合、文字エンコーディング情報をある種の「メタ」情報として保持することが重要です。したがって、たとえば XML ファイルのヘッダーは、または、ファイルにあらゆる種類のメタデータを追加するファイルシステム固有の方法は言うまでもなく、Apache htdocs コンテンツなどで時々見られるように、ファイル名の一部としてのサフィックスさえあります。また、たとえば http 経由で通信する場合、Content-Type ヘッダー フィールドには、実際のコンテンツを正しく解釈できるようにするための追加の文字セット情報が含まれることがよくあります。

ただし、あなたの例ではPDFファイルを読んでいるので、文字エンコーディングに関係なく、とにかく純粋なテキストデータを実際に期待できるかどうかはわかりません.

したがって、この場合、作業しているアプリケーションの残りの部分によっては、JSON 文字列内でバイナリ データを転送したい場合があります。これを行う一般的な方法は、バイナリ データを Base64 に変換し、転送されたら、受信した Base64 文字列からバイナリ データを復元することです。 Javaでバイト配列をBase64に変換するにはどうすればよいですか? このようなタスクの出発点として適しています。

于 2013-09-20T09:03:41.630 に答える
1

String クラスは、このためにオーバーロードされたコンストラクターを提供します。

String s = new String(byteArray, "UTF-8");

byteArray = s.getBytes("UTF-8");

エンコーディング方式が異なればバイト表現も異なる可能性があるため、明示的なエンコーディング文字セットを提供することをお勧めします。詳細はこちらこちらをご覧ください。

また、入力ストリームは一度にすべてのコンテンツを読み取れない場合があります。読み取るものがなくなるまで、ループで読み取る必要があります。ドキュメントを読んでください。read()読み取ったバイト数を返します。

この入力ストリームから最大b.length バイトのデータをバイト配列に読み取ります。このメソッドは、何らかの入力が利用可能になるまでブロックします

于 2013-09-20T07:53:01.613 に答える