groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Keegan Witt (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GROOVY-7465) ResourceGroovyMethods/NioGroovyMethods BOM behavior is inconsistant
Date Sun, 05 Jul 2015 18:01:04 GMT

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

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

What should I put in the {{@Since}} tag?  {{1.4.5}}?

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

Mime
View raw message