RFR: 8316681: Rewrite URLEncoder.encode to use small reusable buffers [v6]

Claes Redestad redestad at openjdk.org
Fri Sep 22 08:53:07 UTC 2023


> `URLEncoder` currently appends chars that needs encoding into a `java.io.CharArrayWriter`, converts that to a `String`, uses `String::getBytes` to get the encoded bytes and then appends these bytes in a escaped manner to the output stream. This is somewhat inefficient.
> 
> This PR replaces the `CharArrayWriter` with a reusable `CharBuffer` + `ByteBuffer` pair. This allows us to encode to the output `StringBuilder` in small chunks, with greatly reduced allocation as a result.
> 
> The exact size of the buffers is an open question, but generally it seems that a tiny buffer wins by virtue of allocating less, and that the per chunk overheads are relatively small.

Claes Redestad has updated the pull request incrementally with one additional commit since the last revision:

  Update src/java.base/share/classes/java/net/URLEncoder.java
  
  Co-authored-by: ExE Boss <3889017+ExE-Boss at users.noreply.github.com>

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/15865/files
  - new: https://git.openjdk.org/jdk/pull/15865/files/8665ae79..016675f1

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=15865&range=05
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=15865&range=04-05

  Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/15865.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/15865/head:pull/15865

PR: https://git.openjdk.org/jdk/pull/15865


More information about the net-dev mailing list