У меня есть программа, которая обновляет файлы на компьютере, используя информацию, отправленную сервером, используя сокеты. Как мне было это работало, но я хотел, чтобы сделать его более понятным, более простым, надежным и т.д. здесь предыдущий код:Вопросы по обновлению 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
отправленном через сокет? Я сделал некоторые поисковые запросы, но я не чувствую, что знаю правильный вопрос. любая помощь была бы замечательной! заранее спасибо!!!
это замечательно. Спасибо большое!!! – PulsePanda
Рад знать, что это помогло. – MickJ