Java Runnable File IO

时间:2014-02-14 02:26:51

标签: java file-io runnable

我写了一个Runnable类

private static class Processing implements Runnable {
    private static File file;
    private static byte[] message;
    public Processing ( File f, byte[] m ){
        this.file = f;
        this.message = m;
    }       
    public void run(){
        WriteToFile( file , message );
                          ... other processing....
    }

private static void WriteToFile( File f , byte[] msg ){
    FileOutputStream fs = null;
    try {
        fs =  new FileOutputStream( f )  ;
        fs.write(  msg );
        fs.flush();
        fs.close(); 
    }catch (Exception e){
        e.printStackTrace();
    }

}

在主要班级

public class MainClass{
   public void somemethod(){
      ....
      ( new Thread(new Processing ( <somefile> , <somebytes> ))).start();
      ....
   }

}

我的问题是

  1. 这个方法是否正确?我的愿望是改进文件io(在 WriteToFile方法)因为MainClass被调用了1000多个 用户。
  2. 如何在代码中模拟1000个用户?是吗

    for (int i = 0 ; i<1000 ...){
      ( new Thread(new Processing ( <somefile> , <somebytes> ))).start();
    }
    
  3. 感谢

3 个答案:

答案 0 :(得分:3)

  • 对于Q1:看起来没问题,但请记住,您始终关闭finally块中的流,因为写入操作可能会失败,这可能会使您的文件处理悬空。

  • 对于Q2:这就是它的完成方式,只要你没有用1000个线程写入同一个文件,在这种情况下,你需要考虑线程安全。

答案 1 :(得分:3)

我同意Neeveks的回答,但我可以看到另外两个问题。

1)filemessage应该是实例变量,不应该是静态的。将它们设置为静态意味着您一次只能管理一个文件和一条消息。

2)方法的名称以Java中的小写字母开头。请将WriteToFile重命名为writeToFile。这不是一个编程问题,但它有助于阅读您的代码。

答案 2 :(得分:1)

看起来不错,如果数据很大,您可以尝试内存映射文件。您可以从已有的关于写入文件here的ans中获得一些参考。