[ https://issues.apache.org/jira/browse/GROOVY-7465?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King closed GROOVY-7465. ----------------------------- > ResourceGroovyMethods/NioGroovyMethods BOM behavior is inconsistent > ------------------------------------------------------------------- > > Key: GROOVY-7465 > URL: https://issues.apache.org/jira/browse/GROOVY-7465 > Project: Groovy > Issue Type: Bug > Components: groovy-jdk > Reporter: Keegan Witt > Assignee: Keegan Witt > Labels: breaking_change > Fix For: 2.5.0-alpha-1 > > > Most users would expect {{withPrintWriter}} to be a convenience method that > behaves the same as if they had called {{new PrintWriter}} themselves, but > this is not the current behavior: > {code:java} > File file = new File("tmp.txt") > try { > String text = " " > String charset = "UTF-16LE" > file.withPrintWriter(charset) { it << text } > println "withPrintWriter" > file.getBytes().each { System.out.format("%02x ", it) } > PrintWriter w = new PrintWriter(file, charset) > w.print(text) > w.close() > println "\n\nnew PrintWriter" > file.getBytes().each { System.out.format("%02x ", it) } > } finally { > file.delete() > } > {code} > Outputs > {noformat} > withPrintWriter > ff fe 20 00 > new PrintWriter > 20 00 > {noformat} > Additionally most users would expect that there's no difference in behavior > between NIO and traditional methods, but this is also not the case > {code:java} > import java.nio.file.Files > import java.nio.file.FileSystems > import java.nio.file.Path > File file = new File("tmp1.txt") > Path path = FileSystems.getDefault().getPath("tmp2.txt") > try { > String text = " " > String charset = "UTF-16LE" > file.withPrintWriter(charset) { it << text } > println "withPrintWriter" > file.getBytes().each { System.out.format("%02x ", it) } > path.withPrintWriter(charset) { it << text } > println "\n\nnio withPrintWriter" > path.getBytes().each { System.out.format("%02x ", it) } > } finally { > file.delete() > Files.delete(path) > } > {code} > outputs > {noformat} > withPrintWriter > ff fe 20 00 > nio withPrintWriter > 20 00 > {noformat} > This is because {{ResourceGroovyMethods}} have a {{writeUTF16BomIfRequired}} > method that {{NioGroovyMethods}} don't. > Most likely we'd want to change {{ResourceGroovyMethods}} to not add the BOM > by default, or at least allow the user to opt out of that behavior by doing > something like adding a boolean argument to the existing methods that would > control that behavior. The other option would be to make the NIO methods > consistent by having them also use {{writeUTF16BomIfRequired}}. > This began as a > [discussion|http://mail-archives.apache.org/mod_mbox/incubator-groovy-users/201506.mbox/browser] > on the user mailing list. -- This message was sent by Atlassian JIRA (v6.3.15#6346)