2014-12-13 2 views
0

Я попробовал следующее: Но это не даже распечатать один номер:/ файл 700mb большой занимает около ~ 15sКак отслеживать writeObject() Прогресс

2-й класс должен зацепить в выходной поток, если я понял это правильно и не нашел решение в другом месте

Проблема: я не могу отслеживать процесс «writeObject()» - я пытаюсь сделать панель прогресса, чтобы показать, как большая часть файла уже загружена

public class Main { 
     public static void main(String[] args) throws Exception { 


     String file_name = "M:\\Config\\huge.avi"; 

     File file = new File(file_name); 
     System.out.println(file.getPath()); 
     if(file.exists()){ 
      Socket socket = new Socket("localhost", 4112); 


      ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
      ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); 

      FileInputStream fis = new FileInputStream(file); 

      MyCountingStream mcs = new MyCountingStream(oos); 


      oos.writeObject(file.getName()); 

      byte [] buffer = new byte[(int)file.length()]; 
      Integer bytesRead = 0; 
      Timeline aftertickz = new Timeline(new KeyFrame(Duration.millis(10), new EventHandler<ActionEvent>() { 
       @Override 
       public void handle(ActionEvent arg0) { 
        System.out.println(mcs.bytesWrittenSoFar()); 
       } 
      })); 
      aftertickz.setCycleCount(Timeline.INDEFINITE); 
      aftertickz.play(); 
      while ((bytesRead = fis.read(buffer)) > 0) { 
       oos.writeObject(bytesRead); 
       oos.flush(); 
       oos.writeObject(Arrays.copyOf(buffer, buffer.length)); 
      } 

      oos.close(); 
      ois.close(); 
      mcs.close(); 
      fis.close(); 
      socket.close(); 
      System.exit(0);  
     }else{ 
      System.out.println("File doesn't exist"); 
      System.exit(0); 
     } 
    } 
} 



public class MyCountingStream extends DataOutputStream { 
    public MyCountingStream(OutputStream out) { 
     super(out); 
    } 

    public int bytesWrittenSoFar() { 
     return written; 
    } 
} 
+0

Пожалуйста, сформулируйте Ваши проблемы – afzalex

+0

*, возможно, забыли, что СРЮ * Это на вершине Теперь – Totenfluch

ответ

0

Вы можете просто отправить файл как поток необработанных байтов вместо использования writeObject(), а затем отслеживать (количество байтов, отправленных/размер файла в байтах) * 100, округленное до ближайшего целого числа.

Или ..... Взгляните: Getting Progress of ObjectOutputStream/ObjectInputStream

+0

я буквально seached за 1 час в настоящее время и не мог 't управлять им .. не могли бы вы дать мне пример для вашего «потока сырого байта»? – Totenfluch

+0

Вместо того, чтобы писать фактический код, я расскажу вам, какой поиск даст вам концепцию. Найдите что-то вроде «прогресс загрузки java-трека». – user3530525