2013-03-07 3 views
0

У меня есть программа, которая обновляет файлы на компьютере, используя информацию, отправленную сервером, используя сокеты. Как мне было это работало, но я хотел, чтобы сделать его более понятным, более простым, надежным и т.д. здесь предыдущий код:Вопросы по обновлению Java Java

int filesize = 6022386; // filesize temporary hardcoded 

    int bytesRead; 
    int current = 0; 

    /** 
    * receive file 
    */ 
    try { 
     byte[] byteArray = new byte[filesize]; 
     java.io.InputStream inStream = socket.getInputStream(); 
     bytesRead = inStream.read(byteArray, 0, byteArray.length); 
     FileOutputStream fileOutStream = new FileOutputStream(
       "C:\\Program Files\\AVTECH\\NPS\\Files\\bin\\NPS Game.txt"); 
     BufferedOutputStream buffOutStream = new BufferedOutputStream(
       fileOutStream); 
     current = bytesRead; 

     do { 
      bytesRead = inStream.read(byteArray, current, 
        (byteArray.length - current)); 
      if (bytesRead >= 0) 
       current += bytesRead; 
     } while (bytesRead > -1); 

     buffOutStream.write(byteArray, 0, current); 
     buffOutStream.flush(); 
     buffOutStream.close(); 
     inStream.close(); 
     socket.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     socket.close(); 
    } 

, как вы можете видеть, в цикле do, while, он с помощью входной поток для получения данных. теперь, когда я обновил свою программу, у меня есть поток, отправляющий объект с именем UpdateObject, который содержит массив byte[] вместе с файловой директорией. вот этот код:

int filesize = 6022386; // filesize temporary hardcoded 

    int bytesRead; 
    int current = 0; 
    try { 
     byte[] byteArray = o.getFile(); 
     java.io.InputStream inStream = socket.getInputStream(); 
     bytesRead = inStream.read(byteArray, 0, byteArray.length); 

     FileOutputStream fileOutStream = new FileOutputStream(o.getPath()); 
     BufferedOutputStream buffOutStream = new BufferedOutputStream(
       fileOutStream); 
     current = bytesRead; 

     do { 
      bytesRead = inStream.read(byteArray, current, 
        (byteArray.length - current)); 
      if (bytesRead >= 0) 
       current += bytesRead; 
     } while (bytesRead > -1); 

     buffOutStream.write(byteArray, 0, current); 
     buffOutStream.flush(); 
     buffOutStream.close(); 
     inStream.close(); 
     socket.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

теперь мой вопрос заключается в следующем: как я можешь изменить его таким образом, вместо того, чтобы использовать instream, чтобы использовать только байты [] объект в UpdateObject отправленном через сокет? Я сделал некоторые поисковые запросы, но я не чувствую, что знаю правильный вопрос. любая помощь была бы замечательной! заранее спасибо!!!

ответ

1

Заменяя большую часть вашего кода в улове блока попробуйте:

FileOutputStream fileOutStream = new FileOutputStream(
    UpdateObject.getDirectory()+"\\NPS Game.txt"); 
fileOutStream.write(UpdateObject.getBytes()); //this is the byte[] array 
fileOutStream.close(); 

Надеется, что это помогает.

+0

это замечательно. Спасибо большое!!! – PulsePanda

+0

Рад знать, что это помогло. – MickJ

Смежные вопросы