Author: lindner
Date: Tue May 20 15:04:21 2008
New Revision: 658460
URL: http://svn.apache.org/viewvc?rev=658460&view=rev
Log:
Use java.nio and a concurrent hashmap to allow for more scalable character set
conversions.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java?rev=658460&r1=658459&r2=658460&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
Tue May 20 15:04:21 2008
@@ -26,6 +26,13 @@
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CodingErrorAction;
+import java.nio.charset.CharsetEncoder;
+
/**
* Represents the results of an HTTP content retrieval operation.
*/
@@ -53,6 +60,9 @@
private HttpResponse rewritten;
+ // Holds character sets for fast conversion
+ private static ConcurrentHashMap<String,Charset> encodingToCharset= new
ConcurrentHashMap<String,Charset>();
+
/**
* Create a dummy empty map. Access via HttpResponse.ERROR
*/
@@ -158,17 +168,17 @@
*/
public String getResponseAsString() {
if (responseString == null) {
- try {
- String response = new String(responseBytes, encoding);
- // Strip BOM.
- if (response.length() > 0 && response.codePointAt(0) == 0xFEFF) {
- responseString = response.substring(1);
- } else {
- responseString = response;
- }
- } catch (UnsupportedEncodingException e) {
- responseString = "Unable to convert from encoding: " + encoding;
+ Charset charset = encodingToCharset.get(encoding);
+ if (charset == null) {
+ charset = Charset.forName(encoding);
+ encodingToCharset.put(encoding,charset);
}
+ responseString =
charset.decode(ByteBuffer.wrap(responseBytes)).toString();
+
+ // Strip BOM if present
+ if (responseString.length() > 0 && responseString.codePointAt(0) ==
0xFEFF) {
+ responseString = responseString.substring(1);
+ }
}
return responseString;
}