2017-03-03 7 views
-2

として表示します。ファイルfos1.txtの出力結果はdですが、ファイル内で100にしたいのですが、どうすればいいですか?ByteArrayOutputStreamの出力を整数

public class Byteo { 

    public static void main(String[] args) { 

     try { 
      FileOutputStream fos1 = new FileOutputStream("G:\\fos1.txt"); 


      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     int x = 100; 

      bos.write(x);  


      try { 

       bos.writeTo(fos1); 

       bos.flush(); 
       bos.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } 

} 
+0

xを文字列にすることはできますか? –

+0

は機能しません。私の質問では明らかに出力はASCII形式であり、元の形式にしたいと考えています。 – Hassan

+0

本当ですか? bos.write(Integer.toString(x).getBytes());などの命令を使用した場合、ファイル内に100を含める必要があります –

答えて

0

あなたがint型/整数/文字を変換する必要がありますバイトコードとして解釈されないようにStringに変換します。

だから、あなたはで終わる​​

2

write(int b)は、ファイルにエンコードされたバイトを書き込み、それゆえ、バイトコードとしてint x = 100を解釈しています。

書き込み(INT b)は このバイト配列出力 ストリームに指定されたバイトを書き込み。

あなたはこのような何かを行うことができます:

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    int x = 100; 
    bos.write(String.valueOf(x).getBytes(StandardCharsets.UTF_8)); 
+1

あなたは正しいです、それはスーパークラスで実装されています。これが答えです。 – f1sh

+0

著者は文字列として整数を書き込もうとしています - 文字列リテラルを使用して質問の一部をバイパスします。また、ほとんどの場合、StringでgetBytes()を呼び出すべきではありません。これは、VMのデフォルトエンコーディングでStringのバイト表現を返します。厄介な驚きを避けるために、エンコードを指定する方が良いです。 –

+0

@JamesFryあなたが正しいです、私はエンコーディングを指定するように変更しました。 –

0
public class Byteo { 

    public static void main(String[] args) throws IOException { 

     int x = 100; 
     FileWriter fw = new FileWriter("fos1.txt"); 
     try { 
      fw.write(String.valueOf(x)); 
     } finally { 
      fw.flush(); 
      fw.close(); 
     } 

    } 
} 
1

現在地ByteArrayOutputStreamを使用する必要はありません。より良いアプローチは、あなたのための変換の多くを扱うライターを使用すると、明示的にバイトにされたCharSequenceから変換するときに使用するエンコーディングを宣言することです:

public static void main(String[] args) { 
    String path = "..."; 

    int x = 100; 

    try (Writer writer = new OutputStreamWriter(new FileOutputStream(path), 
     StandardCharsets.UTF_8)) { 
    writer.write(Integer.toString(x)); 
    } catch (IOException e) { 
    throw new RuntimeException("Something erred", e); 
    } 
} 
関連する問題