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");
        }   
    }
    }

    }

由于我使用面向字节的流将数据写入文件;我的问题是,数据是否会在每一步中分 4 步(1 个字节)写入文件。考虑int为4字节。如果我错了,请纠正我。

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) ,它仅写入所提供数字的字节表示 - 仅写入一个字节,请查看OutputStream API。因此,您的文件将仅包含一个 6 字节。如果您尝试写入一个大于 255 的数字 - 您可能会遇到异常。

基本上 OutputStream 要求其子类只实现 write(int) 方法,因此其他 OutputStream 方法将它们的字节发送到 write(int)。然而,FileOutputStream 中的所有写入方法都被覆盖,并利用可能尝试一次发送所有数据的缓冲本机调用。

于 2012-11-22T15:22:51.823 回答