You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Keegan Witt (JIRA)" <ji...@apache.org> on 2015/06/11 15:37:00 UTC

[jira] [Commented] (GROOVY-7465) ResourceGroovyMethods/NioGroovyMethods BOM behavior is inconsistant

    [ https://issues.apache.org/jira/browse/GROOVY-7465?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14581928#comment-14581928 ] 

Keegan Witt commented on GROOVY-7465:
-------------------------------------

If we're good with the approach, I'm willing to take a crack at a PR if you wish.

> ResourceGroovyMethods/NioGroovyMethods BOM behavior is inconsistant
> -------------------------------------------------------------------
>
>                 Key: GROOVY-7465
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7465
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-jdk
>            Reporter: Keegan Witt
>            Assignee: Guillaume Laforge
>
> 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.4#6332)