summaryrefslogtreecommitdiffstats
path: root/simple/simple-http/src/main/java/org/simpleframework/http/socket/DataConverter.java
diff options
context:
space:
mode:
Diffstat (limited to 'simple/simple-http/src/main/java/org/simpleframework/http/socket/DataConverter.java')
-rw-r--r--simple/simple-http/src/main/java/org/simpleframework/http/socket/DataConverter.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/simple/simple-http/src/main/java/org/simpleframework/http/socket/DataConverter.java b/simple/simple-http/src/main/java/org/simpleframework/http/socket/DataConverter.java
new file mode 100644
index 0000000..5713fd6
--- /dev/null
+++ b/simple/simple-http/src/main/java/org/simpleframework/http/socket/DataConverter.java
@@ -0,0 +1,111 @@
+/*
+ * DataConverter.java February 2014
+ *
+ * Copyright (C) 2014, Niall Gallagher <niallg@users.sf.net>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package org.simpleframework.http.socket;
+
+/**
+ * The <code>DataConverter</code> object is used to convert binary data
+ * to text data and vice versa. According to RFC 6455 a particular text
+ * frame might include a partial UTF-8 sequence; however, the whole
+ * message MUST contain valid UTF-8.
+ *
+ * @author Niall Gallagher
+ *
+ * @see org.simpleframework.http.socket.DataFrame
+ */
+public class DataConverter {
+
+ /**
+ * This is the character encoding used to convert the text data.
+ */
+ private final String charset;
+
+ /**
+ * Constructor for the <code>DataConverter</code> object. By default
+ * this uses UTF-8 character encoding to convert text data as this
+ * is what is required for RFC 6455 section 5.6.
+ */
+ public DataConverter() {
+ this("UTF-8");
+ }
+
+ /**
+ * Constructor for the <code>DataConverter</code> object. This can be
+ * used to specific a character encoding other than UTF-8. However it
+ * is not recommended as RFC 6455 section 5.6 suggests the frame must
+ * contain valid UTF-8 data.
+ *
+ * @param charset the character encoding to be used
+ */
+ public DataConverter(String charset) {
+ this.charset = charset;
+ }
+
+ /**
+ * This method is used to convert text using the character encoding
+ * specified when constructing the converter. Typically this will use
+ * UTF-8 as required by RFC 6455.
+ *
+ * @param text this is the string to convert to a byte array
+ *
+ * @return a byte array decoded using the specified encoding
+ */
+ public byte[] convert(String text) {
+ try {
+ return text.getBytes(charset);
+ } catch(Exception e) {
+ throw new IllegalStateException("Could not encode text as " + charset, e);
+ }
+ }
+
+ /**
+ * This method is used to convert data using the character encoding
+ * specified when constructing the converter. Typically this will use
+ * UTF-8 as required by RFC 6455.
+ *
+ * @param text this is the byte array to convert to a string
+ *
+ * @return a string encoded using the specified encoding
+ */
+ public String convert(byte[] binary) {
+ try {
+ return new String(binary, charset);
+ } catch(Exception e) {
+ throw new IllegalStateException("Could not decode data as " + charset, e);
+ }
+ }
+
+ /**
+ * This method is used to convert data using the character encoding
+ * specified when constructing the converter. Typically this will use
+ * UTF-8 as required by RFC 6455.
+ *
+ * @param text this is the byte array to convert to a string
+ * @param offset the is the offset to read the bytes from
+ * @param size this is the number of bytes to be used
+ *
+ * @return a string encoded using the specified encoding
+ */
+ public String convert(byte[] binary, int offset, int size) {
+ try {
+ return new String(binary, offset, size, charset);
+ } catch(Exception e) {
+ throw new IllegalStateException("Could not decode data as " + charset, e);
+ }
+ }
+}