2016-09-28 4 views
0

異なるファイルタイプを含むフォルダの差分になるため、文字列オブジェクトがあります。その中のすべてが同じ文字セットでエンコードされているわけではありません。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パラメータリストの一部として送信する必要があります。

+1

なぜバイトとしてファイルを読んでいませんか?文字列に読み込む代わりに? –

+0

私はファイルを読んでいません。おそらく、私はファイルを送ることができないと言ったときに私は十分にはっきりしていなかったでしょう。このコードは受信側にあり、Stringオブジェクトは実際にはPOSTリクエストのフォーム内のjsonオブジェクトから取得します。 –

+0

ああ、私はそれが遅いと言うとき、私はそれを意味します。今は400kのファイルと1時間と10分で作業しています。それは私には絶対に意味がありません。それはそれがジェンキンの中で動いているという事実と関係がありますか? –

答えて

0

なぜ:

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() 

patchFile.withOutputStream { os -> 
    os << decoded_diff.bytes 
} 
+0

残念ながら、それはクラッシュしています。エラー発生しjava.io.NotSerializableException:パイプライン java.io.NotSerializableExceptionのjava.io.BufferedOutputStream [パイプライン]終了:org.jboss.marshalling.river.RiverMarshaller.doWriteObjectでjava.io.BufferedOutputStream \t(RiverMarshaller。 java:860) \t org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65) –

+0

@JonHodgsonああ、おそらくスクリプトの戻り値をシリアル化しようとしています...「null」を'}'の後の最後の行 –

+0

私はそれの目的を本当に理解していませんが、それは助けになりません。私はJenkinsのGroovyで、期待したとおりに動作しないものがあることがわかりました。これはGroovyの初心者の人生をさらに難しくしています –

関連する問題