Копирование файла IFS с использованием JT400 в коде
У меня есть этот кусок кода, который будет копировать файлы из IFS на локальный диск. И я хотел бы спросить несколько советов о том, как сделать это лучше.
public void CopyFile(AS400 system, String source, String destination){
File destFile = new File(destination);
IFSFile sourceFile = new IFSFile(system, source);
if (!destFile.exists()){
try {
destFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
IFSFileInputStream in = null;
OutputStream out = null;
try {
in = new IFSFileInputStream(sourceFile);
out = new FileOutputStream(destFile);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
} catch (AS400SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(in != null) {
in.close();
}
if(out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} // end try catch finally
} // end method
куда
- источник = полный путь IFS + имя файла и
- назначение = полный локальный путь + имя файла
Я хотел бы спросить кое-что относительно следующего:
а. Вопросы производительности
- будет ли это иметь большое влияние с точки зрения использования процессора для системы хоста AS400?
- будет ли это иметь большое влияние на JVM, которая будет использоваться (с точки зрения использования памяти)
- Повлияет ли включение этого в веб-приложение на производительность сервера приложений (это будет тяжелая задача или нет)?
- будет ли использование этого для копирования нескольких файлов (с избыточным запуском) большой нагрузкой на все задействованные ресурсы?
б. Качество кода
- Достаточно ли моей реализации IFSFileInputStream, или простой объект FileInputStream справится со своей задачей?
AFAIK, мне просто нужен объект AS400, чтобы убедиться, что исходный файл, на который ссылаются, является файлом из IFS.
Я новичок в AS400, и IFS хотел бы спросить честного мнения у опытных.
2 ответа
В целом все выглядит хорошо (не пытаясь). Это не должно иметь заметного влияния.
- in.read () может вернуть 0. Вместо этого проверьте -1.
- Вместо того, чтобы вручную буферизовать, просто оберните их соответствующим BufferedInputStream/BufferedOutputstream и читайте по одному символу за раз и проверяйте его на -1.
- трудно поймать красавицу Это подойдет, но позже вы получите больше опыта и научитесь делать это несколько лучше.
- НЕ глотайте исключения и печатайте их. Код, вызывающий вас, не будет знать, хорошо ли это прошло или нет.
- Когда закончите с объектом AS400, используйте as400.disconnectAllServices().
Смотрите пример кода справки IBM:
С уважением