【问题标题】:Java: String Comparison between FileOutputStream and ByteArrayOutputStreamJava:FileOutputStream 和 ByteArrayOutputStream 之间的字符串比较
【发布时间】:2013-11-17 19:34:47
【问题描述】:

我有一段代码使用DataOutputStream 包裹FileOutputStream 写入文件,并使用DataOutputStream 包裹ByteArrayOutputStream 写入字符串,两者都使用writeDouble() 方法.

然后我尝试从文件中读取并将从文件中读取的内容与字符串进行比较,(BufferedReader 包裹在 StringReader 包裹 b(ByteArrayOutputStream).toString() 和 BufferedReader 包裹在 a FileReader) 并得到相同的结果。

虽然

System.out.println(StrRead1.toString()) 

System.out.println(StrRead2.toString()) 

在终端打印相同的东西,当我使用

比较两者时
(StrRead1.toString().equals(StrRead2.toString()))

它们永远不相等。(Str1 和 Str2 为 StringBuilders)

有人可以帮帮我吗?谢谢。

【问题讨论】:

  • 它们在视觉上可能看起来相同,但可能有尾随空格、换行符等。
  • 它可能是尾随空格。使用 StrRead1.toString().trim().equals(StrRead2.toString().trim());
  • 试试System.out.println("[" + StrRead1.toString() + "]");(2 也一样)。这是识别可能导致此问题的大多数(但不是全部)字符的好方法。
  • 如果您将更多代码放入问题中,可能会更容易发现问题。
  • 为什么要创建Strings 而不是使用FileInputStreamByteArrayInputStream 并逐字节比较?

标签: java stringbuilder dataoutputstream bytearrayoutputstream


【解决方案1】:

writeDouble() 的结果是二进制的。您无需尝试将结果转换为字符串,或使用 Reader 读取该数据。使用 InputStream 并比较字节。或者使用 DataInputStream 并在每种情况下比较 readDouble() 的结果。

但我真的不知道你为什么要这样做。 writeDouble() 是 writeDouble()。它做同样的事情,不管它连接到什么输出流。

【讨论】:

  • 谢谢大家。一定是生锈了,因为现在我仔细看了看,应该没那么难。只需使用 readDouble() 从文件中读取并将结果与​​生成的二进制字符串进行比较,如上所示。
猜你喜欢
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 2021-12-15
相关资源
最近更新 更多