異なるファイルタイプを含むフォルダの差分になるため、文字列オブジェクトがあります。その中のすべてが同じ文字セットでエンコードされているわけではありません。Groovyで文字変換を行わない文字列をディスクに書き込む
正しいコードが文字列に入っていますが、文字列にアクセスしようとするたびに、groovyは文字列をデコードして処理します。
今、次は私が
String decoded_diff = "String that contains codes from different character encodings"
patch_file_name = 'changes.patch'
patch_file = new File(pwd(), patch_file_name)
patch_file.delete()
max_block_size = 1024 * 1024
char[] char_buffer = new char[max_block_size]
block_start = 0
patch_length = decoded_diff.length()
while (true) {
block_size = Math.min(patch_length - block_start, max_block_size)
decoded_diff.getChars(block_start, block_start + block_size, char_buffer, 0)
block_start += block_size
byte[] byte_buffer = new byte[block_size]
for (int i = 0; i < block_size; i++) {
byte_buffer[i] = (int) char_buffer[i]
}
patch_file.append(byte_buffer)
if (block_start == patch_length) break
}
必要なものをやっているようだが、
は、同じことを達成するためのより高速な方法はありsloooowますか?最終的なパッチファイルは元のdiffと同じでなければなりません。残念ながら、ファイル自体を送信することはできません(ジェンキンは現在パイプラインジョブのファイルパラメータをサポートしていません)ので、エスケープしてjsonパラメータリストの一部として送信する必要があります。
なぜバイトとしてファイルを読んでいませんか?文字列に読み込む代わりに? –
私はファイルを読んでいません。おそらく、私はファイルを送ることができないと言ったときに私は十分にはっきりしていなかったでしょう。このコードは受信側にあり、Stringオブジェクトは実際にはPOSTリクエストのフォーム内のjsonオブジェクトから取得します。 –
ああ、私はそれが遅いと言うとき、私はそれを意味します。今は400kのファイルと1時間と10分で作業しています。それは私には絶対に意味がありません。それはそれがジェンキンの中で動いているという事実と関係がありますか? –