0

У меня есть кусок кода, который записывает в файл, используя DataOutputStream обернутые вокруг FileOutputStream, и записывает в строку, используя DataOutputStream обернут вокруг ByteArrayOutputStream, как с помощью метода writeDouble().Java: String Сравнение между FileOutputStream и ByteArrayOutputStream

Затем я пытаюсь прочитать из файла и сравнить то, что считывается из файла, в строку, (BufferedReader обернутой вокруг StringReader обернутого вокруг б (ByteArrayOutputStream) .ToString(), и BufferedReader обернут вокруг FileReader) и получить тот же результат.

Даже если

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

и

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

печать то же самое в терминале, когда я сравнить два используя

(StrRead1.toString().equals(StrRead2.toString())) 

они не равны. (Str1 и Str2 - StringBuilder s)

Может кто-нибудь дать мне руку? Благодарю.

+0

они могут выглядеть визуально одинаково, но возможно, что у них есть пробел, линия и т. Д. –

+0

это может быть конечное пространство. Используйте StrRead1.toString(). Trim(). Equals (StrRead2.toString(). Trim()); –

+0

Попробуйте 'System.out.println (" ["+ StrRead1.toString() +"] ");' (и то же самое для 2). Это хороший способ идентифицировать большинство (но не всех) символов, которые могут вызвать эту проблему. – nhgrif

ответ

0

Результат writeDouble() является двоичным. У вас нет бизнеса, пытающегося превратить результат в строку или прочитать данные с помощью Reader. Используйте InputStream и сравнивайте байты. Или используйте DataInputStream и сравнивайте результат readDouble() в каждом случае.

Но я действительно не знаю, зачем вы это делаете. writeDouble() - writeDouble(). Он делает то же самое, независимо от того, к какому потоку вывода он подключен.

+0

Спасибо всем. Должно быть, ржавый, потому что теперь, когда я хорошо посмотрел, это не должно было быть так сложно. Просто использовал readDouble() для чтения из файла и сравнил результат с сгенерированной двоичной строкой, как показано выше. – user3002384

Смежные вопросы