You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by li...@apache.org on 2008/05/21 00:04:22 UTC
svn commit: r658460 -
/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
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;
}