3

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 パス + ファイル名および
  • 宛先 = 完全なローカル パス + ファイル名

以下の点についてお聞きしたいです。

  • を。パフォーマンスに関する考慮事項

    1. これは、ホスト AS400 システムの CPU 使用率に大きな影響を与えますか?
    2. これは、使用されるJVMに大きな影響を与えますか(メモリ使用量の観点から)
    3. これをWebアプリに含めると、アプリサーバーのパフォーマンスに影響しますか(重いタスクになるかどうか)?
    4. これを使用して複数のファイルをコピーする (冗長に実行する) ことは、関連するすべてのリソースにとって大きな負担になりますか?
  • b. コード品質

    1. 私の IFSFileInputStream の実装で十分でしたか、それとも単純な FileInputStream オブジェクトで十分でしたか?

私の知る限り、参照されているソース ファイルが IFS のファイルであることを確認するために AS400 オブジェクトが必要でした。

私は AS400 と IFS の初心者です。経験者の率直な意見をお聞きしたいと思います。

4

2 に答える 2

1

IBMヘルプのサンプルコードを参照してください。

http://publib.boulder.ibm.com/infocenter/iadthelp/v7r1/index.jsp?topic=/com.ibm.etools.iseries.toolbox.doc/ifscopyfileexample.htm

よろしく

于 2013-01-05T14:18:26.783 に答える
1

全体として、(試していなくても)問題ないように見えます。目立った影響を与えるべきではありません。

  • in.read() は 0 を返す場合があります。代わりに -1 をテストしてください。
  • 手動でバッファリングする代わりに、それぞれの BufferedInputStream/BufferedOutputstream でラップインおよびラップアウトし、一度に 1 文字ずつ読み取り、-1 をテストします。
  • try-catch をきれいにするのは難しいです。これで十分ですが、後でより多くの経験を積み、より良い方法を学ぶことができます.
  • 例外を飲み込んで印刷しないでください。あなたを呼び出すコードは、それがうまくいったかどうかわかりません。
  • AS400 オブジェクトの処理が完了したら、as400.disconnectAllServices() を使用します。
于 2012-06-26T10:52:04.927 に答える