0

xml を作成するコードがあります。

public void createXML(InputStream in, String fileName) throws IOException {
    baos = new ByteArrayOutputStream();
    byte[] buf = new byte[BUF_SIZE];
    int readNum = 0;

    Writer writer = new BufferedWriter(new OutputStreamWriter(FileUtil.getOutputStream(fileName, FileUtil.HDD)));
    writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
    writer.write("\t<" + imageFileName + ">\r\n");
    writer.write("\t\t");

    try {
        while ((readNum = in.read(buf)) >= 0) {
            baos.write(buf, 0, readNum);
            writer.write(baos.toString());
            baos.reset();
        }
    }
    finally {
        if (in != null) {
            in.close();
            baos.close();
        }
    }
    writer.write("\r\n\t<" + imageFileName + ">");
    writer.close();
    baos = null;
    buf = null;
}

この xml を複数の部分 (それぞれ最大 500kb) に分けて作成したいと考えています。これどうやってするの?作成されたファイルが既に 500kb であることを確認し、残りのデータを別のファイルに書き込む方法はありますか?

これを使ったのですが、base64文字列をデコードした後の画像、切り取った部分で画像が崩れています。

for(int i = 1; i <= numberOfFiles; i++){
            baos = new ByteArrayOutputStream();
            String filePartName = fileName + ".part" + i + ".xml";
            Writer writer = new BufferedWriter(new OutputStreamWriter(FileUtil.getOutputStream(filePartName, FileUtil.HDD)));
            writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
            writer.write("\t<" + filePartName + ">\r\n");
            writer.write("\t\t");

            int size = 0;
            while ((readNum = in.read(buf)) >= 0 && size < 512000) {
                baos.write(buf, 0, readNum);
                size = size + readNum;
                writer.write(baos.toString());
                baos.reset();
            }

            writer.write("\r\n\t<" + filePartName + ">");
            writer.close();
            baos.close();
        }
    }
    in.close();
4

2 に答える 2

1

その合計を保つreadNumと、

while ((readNum = in.read(buf)) >= 0)

その後、その値をテストして、いつでも新しいファイルを作成できます。

于 2014-03-07T08:31:22.213 に答える
1

500kb = 512000 バイト。この制限を制御するには、別の ByteArrayOutputStream インスタンスを使用します。

于 2014-03-07T08:31:25.847 に答える