1

サンプルコードは:-

import java.io.*;

public class WriteInt{
    public static void main(String [] args)
    {
    WriteInt obj = new WriteInt();
    obj.write();
    }

    public void write(){
    File file = null;
    FileOutputStream out = null;
    int [] arr = {6};
    try{
    file= new File("CheckSize.txt");
    out = new FileOutputStream(file);
    for(int i =0; i<arr.length;i++)
    {
        System.out.println("Trying to write to file:-"+ file);
        out.write(arr[i]);
    }

    }
    catch(IOException ioex){
    ioex.printStackTrace();
    } 
    finally{
    if(out != null)
    {
        System.out.println("Closing the stream");
        try{
        out.close();
        }   
        catch(IOException ioex){
        ioex.printStackTrace();
        }
    }

    else{
        System.out.println("Stream not open");
        }   
    }
    }

    }

Byte-Oriented Stream を使用してデータをファイルに書き込むため。私の質問は、データが各ステップで 4 つのステップ (1 バイト) でファイルに書き込まれるということです。int4バイトと考えてください。間違っている場合は修正してください。

4

2 に答える 2

4

out.write(arr[i]) は int の最下位バイトのみを書き込みます。最善の解決策は、writeInt(int) メソッドを持つ java.io.DataOutputStream を使用することです。

    DataOutputStream out = new DataOutputStream(new FileOutputStream("file"));
    out.writeInt(arr[i]);
于 2012-11-22T13:56:18.230 に答える
1

あなたの例では、提供された数値のバイト表現のみを書き込む OutputStream.write(int) を使用しています-1バイトのみが書き込まれます。 OutputStream APIを見てください。したがって、ファイルには 6 の 1 バイトのみが含まれます。255 を超える数値を書き込もうとすると、例外が発生する可能性があります。

基本的に、OutputStream はそのサブクラスに write(int) メソッドのみを実装する必要があるため、他の OutputStream メソッドはそのバイトを write(int) に送信します。ただし、FileOutputStream のすべての書き込みメソッドはオーバーライドされ、おそらく一度にすべてのデータを送信しようとするバッファリングされたネイティブ呼び出しを利用します。

于 2012-11-22T15:22:51.823 に答える