Hi,
This is interesting. The "fix" looks strange (*not* using BufferedReader),
and doesn't seem to solve the root cause. I think I know what the problem
is now, it is the way CountingReaderInputStream works. Probably the same
problem is in ValueLobDb.createTempClob. What we do there is partially read
the string, and then convert that part to UTF-8. This doesn't produce the
"correct" result. The same problem can be observed as follows. d0 is
correct, but d2 is not:
public static void main(String... args) throws Exception {
String data = "012" + "\ud874\udcd9" + "345";
char[] d = data.toCharArray();
System.out.println("data.length = " + data.length());
byte[] b0 = new String(d, 0, 8).getBytes("UTF-8");
String d0 = new String(b0, "UTF-8");
if (!data.equals(d0)) {
System.out.println("data <> d0");
System.out.println("d0.length = " + d0.length());
}
byte[] b1 = new String(d, 0, 4).getBytes("UTF-8");
byte[] b2 = new String(d, 4, 4).getBytes("UTF-8");
byte[] b3 = new byte[b1.length + b2.length];
System.arraycopy(b1, 0, b3, 0, b1.length);
System.arraycopy(b2, 0, b3, b1.length, b2.length);
String d2 = new String(b3, "UTF-8");
if (!data.equals(d2)) {
System.out.println("data <> d2");
System.out.println("d2.length = " + d2.length());
}
}
I think we need to use Charset / CharsetEncoder directly. Others also ran
into this problem, see
http://stackoverflow.com/questions/62241/how-to-convert-a-reader-to-inputstream-and-a-writer-to-outputstream
Regards,
Thomas
On Wed, Dec 4, 2013 at 5:15 PM, Wickman <[email protected]> wrote:
>
> Den onsdagen den 4:e december 2013 kl. 14:56:48 UTC+1 skrev Noel Grandin:
>
>>
>>
>> On 2013-12-04 14:22, Wickman wrote:
>> >
>> > (I posted this before, but it didn't show up in the group?)
>> >
>> > Adding random strings to a CLOB column sometimes returns the wrong
>> string. Here is working code example:
>>
>> Thanks for the test-case, this is now fixed in SVN.
>>
>> However, I'm not exactly sure why my fix works - it would seem to
>> indicate that the Java BufferedReader class has some
>> kind of boundary condition problem....
>>
>>
> Excellent, thanks!
>
> It might be worth investigating separately why the problem happened.
> Though I doubt this is a problem inside java.io.*, but one can never know :)
>
> --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/h2-database.
> For more options, visit https://groups.google.com/groups/opt_out.
>
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/groups/opt_out.