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:19:00 UTC
[jira] [Created] (GROOVY-7465)
ResourceGroovyMethods/NioGroovyMethods BOM behavior is inconsistant
Keegan Witt created GROOVY-7465:
-----------------------------------
Summary: 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)