Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improve AppendableWriter performance (#1706)
* Improve AppendableWriter performance Override methods which by default create char arrays or convert CharSequences to Strings. This is not necessary for AppendableWriter because it can directly append these values to the Appendable delegate. * Add test for Streams.writerForAppendable
- Loading branch information
1 parent
a4290c5
commit 5f2513a
Showing
2 changed files
with
89 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
68 changes: 68 additions & 0 deletions
68
gson/src/test/java/com/google/gson/internal/StreamsTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
package com.google.gson.internal; | ||
|
||
import static org.junit.Assert.assertEquals; | ||
import static org.junit.Assert.fail; | ||
|
||
import java.io.IOException; | ||
import java.io.Writer; | ||
import org.junit.Test; | ||
|
||
public class StreamsTest { | ||
@Test | ||
public void testWriterForAppendable() throws IOException { | ||
StringBuilder stringBuilder = new StringBuilder(); | ||
Writer writer = Streams.writerForAppendable(stringBuilder); | ||
|
||
writer.append('a'); | ||
writer.append('\u1234'); | ||
writer.append("test"); | ||
writer.append(null); // test custom null handling mandated by `append` | ||
writer.append("abcdef", 2, 4); | ||
writer.append(null, 1, 3); // test custom null handling mandated by `append` | ||
writer.append(','); | ||
|
||
writer.write('a'); | ||
writer.write('\u1234'); | ||
// Should only consider the 16 low-order bits | ||
writer.write(0x4321_1234); | ||
writer.append(','); | ||
|
||
writer.write("chars".toCharArray()); | ||
try { | ||
writer.write((char[]) null); | ||
fail(); | ||
} catch (NullPointerException e) { | ||
} | ||
|
||
writer.write("chars".toCharArray(), 1, 2); | ||
try { | ||
writer.write((char[]) null, 1, 2); | ||
fail(); | ||
} catch (NullPointerException e) { | ||
} | ||
writer.append(','); | ||
|
||
writer.write("string"); | ||
try { | ||
writer.write((String) null); | ||
fail(); | ||
} catch (NullPointerException e) { | ||
} | ||
|
||
writer.write("string", 1, 2); | ||
try { | ||
writer.write((String) null, 1, 2); | ||
fail(); | ||
} catch (NullPointerException e) { | ||
} | ||
|
||
String actualOutput = stringBuilder.toString(); | ||
assertEquals("a\u1234testnullcdul,a\u1234\u1234,charsha,stringtr", actualOutput); | ||
|
||
writer.flush(); | ||
writer.close(); | ||
|
||
// flush() and close() calls should have had no effect | ||
assertEquals(actualOutput, stringBuilder.toString()); | ||
} | ||
} |