Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Winkler2012-05-08 10:41:41 +0000
committerStefan Winkler2012-05-08 10:41:41 +0000
commitd61e20f7123a4bc1c2905701dc1eab3ba8839641 (patch)
tree5919d688b3dcb91fb141024aa3c16e422076f29d /plugins/org.eclipse.net4j.util
parentd46eb17f5bdc0c7c18fa975948af7067f744f797 (diff)
downloadcdo-d61e20f7123a4bc1c2905701dc1eab3ba8839641.tar.gz
cdo-d61e20f7123a4bc1c2905701dc1eab3ba8839641.tar.xz
cdo-d61e20f7123a4bc1c2905701dc1eab3ba8839641.zip
377727: [DB] rawReplication of BLOB in mySQL wrong
https://bugs.eclipse.org/bugs/show_bug.cgi?id=377727 Adjusted fix in telco w/ Eike Fixed bug also for CLOBs
Diffstat (limited to 'plugins/org.eclipse.net4j.util')
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/IOUtil.java78
1 files changed, 43 insertions, 35 deletions
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/IOUtil.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/IOUtil.java
index 92355cf50c..359a79e9cc 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/IOUtil.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/IOUtil.java
@@ -447,35 +447,20 @@ public final class IOUtil
*/
public static void copyBinary(InputStream inputStream, OutputStream outputStream, long size) throws IOException
{
- copyBinary(inputStream, outputStream, size, true);
- }
-
- /**
- * @since 3.2
- */
- public static void copyBinary(InputStream inputStream, OutputStream outputStream, long size, boolean buffered)
- throws IOException
- {
- if (buffered && !(inputStream instanceof BufferedInputStream) && !(inputStream instanceof ByteArrayInputStream))
- {
- inputStream = new BufferedInputStream(inputStream);
- }
-
- if (buffered && !(outputStream instanceof BufferedOutputStream) && !(outputStream instanceof ByteArrayOutputStream))
- {
- outputStream = new BufferedOutputStream(outputStream);
- }
+ byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
while (size > 0L)
{
- int b = inputStream.read();
- if (b == EOF)
+ int bytesToCopy = (int)Math.min(size, buffer.length);
+
+ int bytesRead = inputStream.read(buffer, 0, bytesToCopy);
+ if (bytesRead < bytesToCopy)
{
throw new EOFException();
}
- outputStream.write(b);
- --size;
+ outputStream.write(buffer, 0, bytesToCopy);
+ size -= bytesRead;
}
outputStream.flush();
@@ -513,26 +498,20 @@ public final class IOUtil
*/
public static void copyCharacter(Reader reader, Writer writer, long size) throws IOException
{
- if (!(reader instanceof BufferedReader) && !(reader instanceof CharArrayReader))
- {
- reader = new BufferedReader(reader);
- }
-
- if (!(writer instanceof BufferedWriter) && !(writer instanceof CharArrayWriter))
- {
- writer = new BufferedWriter(writer);
- }
+ char[] buffer = new char[DEFAULT_BUFFER_SIZE];
while (size > 0L)
{
- int c = reader.read();
- if (c == EOF)
+ int charsToCopy = (int)Math.min(size, buffer.length);
+
+ int charsRead = reader.read(buffer, 0, charsToCopy);
+ if (charsRead < charsToCopy)
{
throw new EOFException();
}
- writer.write(c);
- --size;
+ writer.write(buffer, 0, charsRead);
+ size -= charsRead;
}
writer.flush();
@@ -805,6 +784,35 @@ public final class IOUtil
}
}
+ /**
+ * @since 3.2
+ */
+ public static boolean equals(Reader reader1, Reader reader2) throws IORuntimeException
+ {
+ try
+ {
+ for (;;)
+ {
+ int char1 = reader1.read();
+ int char2 = reader2.read();
+
+ if (char1 != char2)
+ {
+ return false;
+ }
+
+ if (char1 == -1)// Implies char2 == -1
+ {
+ return true;
+ }
+ }
+ }
+ catch (IOException ex)
+ {
+ throw new IORuntimeException(ex);
+ }
+ }
+
public static boolean equals(File file1, File file2) throws IORuntimeException
{
if (file1.length() != file2.length())

Back to the top