什么时候在java中使用flush()?

Joh*_*per 6 java serialization

import java.io. * ;
public class Ser {

    public static void main(String args[]) {

        try {
            John myObj = new John("Sachin", "Cricket");
            System.out.println(myObj);
            FileOutputStream fos = new FileOutputStream("FileName");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(myObj);
            oos.flush();
            oos.close();
        } catch (Exception e) {
            System.out.println("Expection" + e);
            System.exit(0);
        }

        try {
            John myObj2;
            FileInputStream fis = new FileInputStream("FileName");
            ObjectInputStream ois = new ObjectInputStream(fis);
            myObj2 = (John) ois.readObject();
            ois.close();
            System.out.println("New Object" + myObj2);
        } catch (Exception e) {
            System.out.println("Expection" + e);
            System.exit(0);
        }

    }
}

class John implements Serializable {

    private String name;
    private String department;

    public John(String name, String department) {
        this.name = name;
        this.department = department;
    }

    public String toString() {
        return "Name" + name + " " + "Department" + department;

    }

}
Run Code Online (Sandbox Code Playgroud)

我在上面的例子中有几个问题.

  1. 何时使用冲洗方法,为什么要使用它?
  2. close方法在这里得分是多少?
  3. myObj2 = (John) ois.readObject(); ...请纠正我,如果我错了,我正在读取文件对象并存储到另一个对象并转换为文件对象.
  4. 序列化的替代方法是什么,或者用Java保存数据.我不希望数据作为字节流进入文件.

rat*_*eak 10

  1. 何时使用冲洗方法,为什么要使用它?

需要同步发送时使用

例如,你有一个双工(2路)连接,你刚刚发送了一条消息,现在需要等待它的回复,没有刷新缓冲的输出流可能会保持它,直到缓冲区填满(死锁)

  1. myObj2 = (John) ois.readObject(); 如果我错了请纠正我,我正在读取文件对象并存储到另一个对象并对文件对象进行类型转换.

错误!您从流中读取了一些数据,将其转换为John(如果读取的对象不是John,则会抛出)

  1. 序列化的替代方法是什么,或者用Java保存数据.我不希望数据作为字节流进入文件.

您可以将其写为文本(将字段写为行中的文本)并提供将其解析为对象的方法


hom*_*ome 7

何时使用冲洗方法,为什么要使用它?

它刷新任何仍然被缓冲的东西OutputStream.JavaDoc中提供了详细说明.


close方法在这里得分是多少?

我不确定你的意思是"携带分数",但该close方法最终关闭资源(输入或输出),它释放例如文件句柄.您应该始终在finally块中调用close 来清理操作系统可能具有的所有引用.

InputStream is = null;
try {
    is = new FileInputStream(...);
    // do stuff
} catch (IOException e) {
    // do stuff
} finally {
    if (is != null) {
        is.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

myObj2 =(John)ois.readObject(); ...请纠正我,如果我错了,我正在读取文件对象并存储到另一个对象并转换为文件对象.

以某种方式更正,您之前反序列化写入文件的对象.这些文件是专有的,只能被Java理解,所以你最后一个问题是好的!


序列化的替代方法是什么,或者用Java保存数据.我不希望数据作为字节流进入文件.

你有很多选择.对于客户端应用程序,您可能希望使用XML,JSON或轻量级数据库(如SQLlite).在服务器端,您也可以查看更强大的数据库(例如MySQL).