<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> * KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> * specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> * under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> */<a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.shiro.codec;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.shiro.util.ByteSource;<a name="line.21"></a>
<span class="sourceLineNo">022</span><a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.io.*;<a name="line.23"></a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
<span class="sourceLineNo">026</span> * Base abstract class that provides useful encoding and decoding operations, especially for character data.<a name="line.26"></a>
<span class="sourceLineNo">027</span> *<a name="line.27"></a>
<span class="sourceLineNo">028</span> * @since 0.9<a name="line.28"></a>
<span class="sourceLineNo">029</span> */<a name="line.29"></a>
<span class="sourceLineNo">030</span>public abstract class CodecSupport {<a name="line.30"></a>
<span class="sourceLineNo">031</span><a name="line.31"></a>
<span class="sourceLineNo">032</span>    /**<a name="line.32"></a>
<span class="sourceLineNo">033</span>     * Shiro's default preferred character encoding, equal to &lt;b&gt;&lt;code&gt;UTF-8&lt;/code&gt;&lt;/b&gt;.<a name="line.33"></a>
<span class="sourceLineNo">034</span>     */<a name="line.34"></a>
<span class="sourceLineNo">035</span>    public static final String PREFERRED_ENCODING = "UTF-8";<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span>    /**<a name="line.37"></a>
<span class="sourceLineNo">038</span>     * Converts the specified character array to a byte array using the Shiro's preferred encoding (UTF-8).<a name="line.38"></a>
<span class="sourceLineNo">039</span>     * &lt;p/&gt;<a name="line.39"></a>
<span class="sourceLineNo">040</span>     * This is a convenience method equivalent to calling the {@link #toBytes(String,String)} method with a<a name="line.40"></a>
<span class="sourceLineNo">041</span>     * a wrapping String and {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}, i.e.<a name="line.41"></a>
<span class="sourceLineNo">042</span>     * &lt;p/&gt;<a name="line.42"></a>
<span class="sourceLineNo">043</span>     * &lt;code&gt;toBytes( new String(chars), {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING} );&lt;/code&gt;<a name="line.43"></a>
<span class="sourceLineNo">044</span>     *<a name="line.44"></a>
<span class="sourceLineNo">045</span>     * @param chars the character array to be converted to a byte array.<a name="line.45"></a>
<span class="sourceLineNo">046</span>     * @return the byte array of the UTF-8 encoded character array.<a name="line.46"></a>
<span class="sourceLineNo">047</span>     */<a name="line.47"></a>
<span class="sourceLineNo">048</span>    public static byte[] toBytes(char[] chars) {<a name="line.48"></a>
<span class="sourceLineNo">049</span>        return toBytes(new String(chars), PREFERRED_ENCODING);<a name="line.49"></a>
<span class="sourceLineNo">050</span>    }<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>    /**<a name="line.52"></a>
<span class="sourceLineNo">053</span>     * Converts the specified character array into a byte array using the specified character encoding.<a name="line.53"></a>
<span class="sourceLineNo">054</span>     * &lt;p/&gt;<a name="line.54"></a>
<span class="sourceLineNo">055</span>     * This is a convenience method equivalent to calling the {@link #toBytes(String,String)} method with a<a name="line.55"></a>
<span class="sourceLineNo">056</span>     * a wrapping String and the specified encoding, i.e.<a name="line.56"></a>
<span class="sourceLineNo">057</span>     * &lt;p/&gt;<a name="line.57"></a>
<span class="sourceLineNo">058</span>     * &lt;code&gt;toBytes( new String(chars), encoding );&lt;/code&gt;<a name="line.58"></a>
<span class="sourceLineNo">059</span>     *<a name="line.59"></a>
<span class="sourceLineNo">060</span>     * @param chars    the character array to be converted to a byte array<a name="line.60"></a>
<span class="sourceLineNo">061</span>     * @param encoding the character encoding to use to when converting to bytes.<a name="line.61"></a>
<span class="sourceLineNo">062</span>     * @return the bytes of the specified character array under the specified encoding.<a name="line.62"></a>
<span class="sourceLineNo">063</span>     * @throws CodecException if the JVM does not support the specified encoding.<a name="line.63"></a>
<span class="sourceLineNo">064</span>     */<a name="line.64"></a>
<span class="sourceLineNo">065</span>    public static byte[] toBytes(char[] chars, String encoding) throws CodecException {<a name="line.65"></a>
<span class="sourceLineNo">066</span>        return toBytes(new String(chars), encoding);<a name="line.66"></a>
<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
<span class="sourceLineNo">068</span><a name="line.68"></a>
<span class="sourceLineNo">069</span>    /**<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * Converts the specified source argument to a byte array with Shiro's<a name="line.70"></a>
<span class="sourceLineNo">071</span>     * {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.<a name="line.71"></a>
<span class="sourceLineNo">072</span>     *<a name="line.72"></a>
<span class="sourceLineNo">073</span>     * @param source the string to convert to a byte array.<a name="line.73"></a>
<span class="sourceLineNo">074</span>     * @return the bytes representing the specified string under the {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.<a name="line.74"></a>
<span class="sourceLineNo">075</span>     * @see #toBytes(String, String)<a name="line.75"></a>
<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
<span class="sourceLineNo">077</span>    public static byte[] toBytes(String source) {<a name="line.77"></a>
<span class="sourceLineNo">078</span>        return toBytes(source, PREFERRED_ENCODING);<a name="line.78"></a>
<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
<span class="sourceLineNo">082</span>     * Converts the specified source to a byte array via the specified encoding, throwing a<a name="line.82"></a>
<span class="sourceLineNo">083</span>     * {@link CodecException CodecException} if the encoding fails.<a name="line.83"></a>
<span class="sourceLineNo">084</span>     *<a name="line.84"></a>
<span class="sourceLineNo">085</span>     * @param source   the source string to convert to a byte array.<a name="line.85"></a>
<span class="sourceLineNo">086</span>     * @param encoding the encoding to use to use.<a name="line.86"></a>
<span class="sourceLineNo">087</span>     * @return the byte array of the specified source with the given encoding.<a name="line.87"></a>
<span class="sourceLineNo">088</span>     * @throws CodecException if the JVM does not support the specified encoding.<a name="line.88"></a>
<span class="sourceLineNo">089</span>     */<a name="line.89"></a>
<span class="sourceLineNo">090</span>    public static byte[] toBytes(String source, String encoding) throws CodecException {<a name="line.90"></a>
<span class="sourceLineNo">091</span>        try {<a name="line.91"></a>
<span class="sourceLineNo">092</span>            return source.getBytes(encoding);<a name="line.92"></a>
<span class="sourceLineNo">093</span>        } catch (UnsupportedEncodingException e) {<a name="line.93"></a>
<span class="sourceLineNo">094</span>            String msg = "Unable to convert source [" + source + "] to byte array using " +<a name="line.94"></a>
<span class="sourceLineNo">095</span>                    "encoding '" + encoding + "'";<a name="line.95"></a>
<span class="sourceLineNo">096</span>            throw new CodecException(msg, e);<a name="line.96"></a>
<span class="sourceLineNo">097</span>        }<a name="line.97"></a>
<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
<span class="sourceLineNo">099</span><a name="line.99"></a>
<span class="sourceLineNo">100</span>    /**<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * Converts the specified byte array to a String using the {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.<a name="line.101"></a>
<span class="sourceLineNo">102</span>     *<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * @param bytes the byte array to turn into a String.<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * @return the specified byte array as an encoded String ({@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}).<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * @see #toString(byte[], String)<a name="line.105"></a>
<span class="sourceLineNo">106</span>     */<a name="line.106"></a>
<span class="sourceLineNo">107</span>    public static String toString(byte[] bytes) {<a name="line.107"></a>
<span class="sourceLineNo">108</span>        return toString(bytes, PREFERRED_ENCODING);<a name="line.108"></a>
<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
<span class="sourceLineNo">110</span><a name="line.110"></a>
<span class="sourceLineNo">111</span>    /**<a name="line.111"></a>
<span class="sourceLineNo">112</span>     * Converts the specified byte array to a String using the specified character encoding.  This implementation<a name="line.112"></a>
<span class="sourceLineNo">113</span>     * does the same thing as &lt;code&gt;new {@link String#String(byte[], String) String(byte[], encoding)}&lt;/code&gt;, but will<a name="line.113"></a>
<span class="sourceLineNo">114</span>     * wrap any {@link UnsupportedEncodingException} with a nicer runtime {@link CodecException}, allowing you to<a name="line.114"></a>
<span class="sourceLineNo">115</span>     * decide whether or not you want to catch the exception or let it propagate.<a name="line.115"></a>
<span class="sourceLineNo">116</span>     *<a name="line.116"></a>
<span class="sourceLineNo">117</span>     * @param bytes    the byte array to convert to a String<a name="line.117"></a>
<span class="sourceLineNo">118</span>     * @param encoding the character encoding used to encode the String.<a name="line.118"></a>
<span class="sourceLineNo">119</span>     * @return the specified byte array as an encoded String<a name="line.119"></a>
<span class="sourceLineNo">120</span>     * @throws CodecException if the JVM does not support the specified encoding.<a name="line.120"></a>
<span class="sourceLineNo">121</span>     */<a name="line.121"></a>
<span class="sourceLineNo">122</span>    public static String toString(byte[] bytes, String encoding) throws CodecException {<a name="line.122"></a>
<span class="sourceLineNo">123</span>        try {<a name="line.123"></a>
<span class="sourceLineNo">124</span>            return new String(bytes, encoding);<a name="line.124"></a>
<span class="sourceLineNo">125</span>        } catch (UnsupportedEncodingException e) {<a name="line.125"></a>
<span class="sourceLineNo">126</span>            String msg = "Unable to convert byte array to String with encoding '" + encoding + "'.";<a name="line.126"></a>
<span class="sourceLineNo">127</span>            throw new CodecException(msg, e);<a name="line.127"></a>
<span class="sourceLineNo">128</span>        }<a name="line.128"></a>
<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>    /**<a name="line.131"></a>
<span class="sourceLineNo">132</span>     * Returns the specified byte array as a character array using the<a name="line.132"></a>
<span class="sourceLineNo">133</span>     * {@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}.<a name="line.133"></a>
<span class="sourceLineNo">134</span>     *<a name="line.134"></a>
<span class="sourceLineNo">135</span>     * @param bytes the byte array to convert to a char array<a name="line.135"></a>
<span class="sourceLineNo">136</span>     * @return the specified byte array encoded as a character array ({@link CodecSupport#PREFERRED_ENCODING PREFERRED_ENCODING}).<a name="line.136"></a>
<span class="sourceLineNo">137</span>     * @see #toChars(byte[], String)<a name="line.137"></a>
<span class="sourceLineNo">138</span>     */<a name="line.138"></a>
<span class="sourceLineNo">139</span>    public static char[] toChars(byte[] bytes) {<a name="line.139"></a>
<span class="sourceLineNo">140</span>        return toChars(bytes, PREFERRED_ENCODING);<a name="line.140"></a>
<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
<span class="sourceLineNo">142</span><a name="line.142"></a>
<span class="sourceLineNo">143</span>    /**<a name="line.143"></a>
<span class="sourceLineNo">144</span>     * Converts the specified byte array to a character array using the specified character encoding.<a name="line.144"></a>
<span class="sourceLineNo">145</span>     * &lt;p/&gt;<a name="line.145"></a>
<span class="sourceLineNo">146</span>     * Effectively calls &lt;code&gt;{@link #toString(byte[], String) toString(bytes,encoding)}.{@link String#toCharArray() toCharArray()};&lt;/code&gt;<a name="line.146"></a>
<span class="sourceLineNo">147</span>     *<a name="line.147"></a>
<span class="sourceLineNo">148</span>     * @param bytes    the byte array to convert to a String<a name="line.148"></a>
<span class="sourceLineNo">149</span>     * @param encoding the character encoding used to encode the bytes.<a name="line.149"></a>
<span class="sourceLineNo">150</span>     * @return the specified byte array as an encoded char array<a name="line.150"></a>
<span class="sourceLineNo">151</span>     * @throws CodecException if the JVM does not support the specified encoding.<a name="line.151"></a>
<span class="sourceLineNo">152</span>     */<a name="line.152"></a>
<span class="sourceLineNo">153</span>    public static char[] toChars(byte[] bytes, String encoding) throws CodecException {<a name="line.153"></a>
<span class="sourceLineNo">154</span>        return toString(bytes, encoding).toCharArray();<a name="line.154"></a>
<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>    /**<a name="line.157"></a>
<span class="sourceLineNo">158</span>     * Returns {@code true} if the specified object can be easily converted to bytes by instances of this class,<a name="line.158"></a>
<span class="sourceLineNo">159</span>     * {@code false} otherwise.<a name="line.159"></a>
<span class="sourceLineNo">160</span>     * &lt;p/&gt;<a name="line.160"></a>
<span class="sourceLineNo">161</span>     * The default implementation returns {@code true} IFF the specified object is an instance of one of the following<a name="line.161"></a>
<span class="sourceLineNo">162</span>     * types:<a name="line.162"></a>
<span class="sourceLineNo">163</span>     * &lt;ul&gt;<a name="line.163"></a>
<span class="sourceLineNo">164</span>     * &lt;li&gt;{@code byte[]}&lt;/li&gt;<a name="line.164"></a>
<span class="sourceLineNo">165</span>     * &lt;li&gt;{@code char[]}&lt;/li&gt;<a name="line.165"></a>
<span class="sourceLineNo">166</span>     * &lt;li&gt;{@link ByteSource}&lt;/li&gt;<a name="line.166"></a>
<span class="sourceLineNo">167</span>     * &lt;li&gt;{@link String}&lt;/li&gt;<a name="line.167"></a>
<span class="sourceLineNo">168</span>     * &lt;li&gt;{@link File}&lt;/li&gt;<a name="line.168"></a>
<span class="sourceLineNo">169</span>     * &lt;/li&gt;{@link InputStream}&lt;/li&gt;<a name="line.169"></a>
<span class="sourceLineNo">170</span>     * &lt;/ul&gt;<a name="line.170"></a>
<span class="sourceLineNo">171</span>     *<a name="line.171"></a>
<span class="sourceLineNo">172</span>     * @param o the object to test to see if it can be easily converted to a byte array<a name="line.172"></a>
<span class="sourceLineNo">173</span>     * @return {@code true} if the specified object can be easily converted to bytes by instances of this class,<a name="line.173"></a>
<span class="sourceLineNo">174</span>     *         {@code false} otherwise.<a name="line.174"></a>
<span class="sourceLineNo">175</span>     * @since 1.0<a name="line.175"></a>
<span class="sourceLineNo">176</span>     */<a name="line.176"></a>
<span class="sourceLineNo">177</span>    protected boolean isByteSource(Object o) {<a name="line.177"></a>
<span class="sourceLineNo">178</span>        return o instanceof byte[] || o instanceof char[] || o instanceof String ||<a name="line.178"></a>
<span class="sourceLineNo">179</span>                o instanceof ByteSource || o instanceof File || o instanceof InputStream;<a name="line.179"></a>
<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
<span class="sourceLineNo">181</span><a name="line.181"></a>
<span class="sourceLineNo">182</span>    /**<a name="line.182"></a>
<span class="sourceLineNo">183</span>     * Converts the specified Object into a byte array.<a name="line.183"></a>
<span class="sourceLineNo">184</span>     * &lt;p/&gt;<a name="line.184"></a>
<span class="sourceLineNo">185</span>     * If the argument is a {@code byte[]}, {@code char[]}, {@link ByteSource}, {@link String}, {@link File}, or<a name="line.185"></a>
<span class="sourceLineNo">186</span>     * {@link InputStream}, it will be converted automatically and returned.}<a name="line.186"></a>
<span class="sourceLineNo">187</span>     * &lt;p/&gt;<a name="line.187"></a>
<span class="sourceLineNo">188</span>     * If the argument is anything other than these types, it is passed to the<a name="line.188"></a>
<span class="sourceLineNo">189</span>     * {@link #objectToBytes(Object) objectToBytes} method which must be overridden by subclasses.<a name="line.189"></a>
<span class="sourceLineNo">190</span>     *<a name="line.190"></a>
<span class="sourceLineNo">191</span>     * @param o the Object to convert into a byte array<a name="line.191"></a>
<span class="sourceLineNo">192</span>     * @return a byte array representation of the Object argument.<a name="line.192"></a>
<span class="sourceLineNo">193</span>     */<a name="line.193"></a>
<span class="sourceLineNo">194</span>    protected byte[] toBytes(Object o) {<a name="line.194"></a>
<span class="sourceLineNo">195</span>        if (o == null) {<a name="line.195"></a>
<span class="sourceLineNo">196</span>            String msg = "Argument for byte conversion cannot be null.";<a name="line.196"></a>
<span class="sourceLineNo">197</span>            throw new IllegalArgumentException(msg);<a name="line.197"></a>
<span class="sourceLineNo">198</span>        }<a name="line.198"></a>
<span class="sourceLineNo">199</span>        if (o instanceof byte[]) {<a name="line.199"></a>
<span class="sourceLineNo">200</span>            return (byte[]) o;<a name="line.200"></a>
<span class="sourceLineNo">201</span>        } else if (o instanceof ByteSource) {<a name="line.201"></a>
<span class="sourceLineNo">202</span>            return ((ByteSource) o).getBytes();<a name="line.202"></a>
<span class="sourceLineNo">203</span>        } else if (o instanceof char[]) {<a name="line.203"></a>
<span class="sourceLineNo">204</span>            return toBytes((char[]) o);<a name="line.204"></a>
<span class="sourceLineNo">205</span>        } else if (o instanceof String) {<a name="line.205"></a>
<span class="sourceLineNo">206</span>            return toBytes((String) o);<a name="line.206"></a>
<span class="sourceLineNo">207</span>        } else if (o instanceof File) {<a name="line.207"></a>
<span class="sourceLineNo">208</span>            return toBytes((File) o);<a name="line.208"></a>
<span class="sourceLineNo">209</span>        } else if (o instanceof InputStream) {<a name="line.209"></a>
<span class="sourceLineNo">210</span>            return toBytes((InputStream) o);<a name="line.210"></a>
<span class="sourceLineNo">211</span>        } else {<a name="line.211"></a>
<span class="sourceLineNo">212</span>            return objectToBytes(o);<a name="line.212"></a>
<span class="sourceLineNo">213</span>        }<a name="line.213"></a>
<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
<span class="sourceLineNo">215</span><a name="line.215"></a>
<span class="sourceLineNo">216</span>    /**<a name="line.216"></a>
<span class="sourceLineNo">217</span>     * Converts the specified Object into a String.<a name="line.217"></a>
<span class="sourceLineNo">218</span>     * &lt;p/&gt;<a name="line.218"></a>
<span class="sourceLineNo">219</span>     * If the argument is a {@code byte[]} or {@code char[]} it will be converted to a String using the<a name="line.219"></a>
<span class="sourceLineNo">220</span>     * {@link #PREFERRED_ENCODING}.  If a String, it will be returned as is.<a name="line.220"></a>
<span class="sourceLineNo">221</span>     * &lt;p/&gt;<a name="line.221"></a>
<span class="sourceLineNo">222</span>     * If the argument is anything other than these three types, it is passed to the<a name="line.222"></a>
<span class="sourceLineNo">223</span>     * {@link #objectToString(Object) objectToString} method.<a name="line.223"></a>
<span class="sourceLineNo">224</span>     *<a name="line.224"></a>
<span class="sourceLineNo">225</span>     * @param o the Object to convert into a byte array<a name="line.225"></a>
<span class="sourceLineNo">226</span>     * @return a byte array representation of the Object argument.<a name="line.226"></a>
<span class="sourceLineNo">227</span>     */<a name="line.227"></a>
<span class="sourceLineNo">228</span>    protected String toString(Object o) {<a name="line.228"></a>
<span class="sourceLineNo">229</span>        if (o == null) {<a name="line.229"></a>
<span class="sourceLineNo">230</span>            String msg = "Argument for String conversion cannot be null.";<a name="line.230"></a>
<span class="sourceLineNo">231</span>            throw new IllegalArgumentException(msg);<a name="line.231"></a>
<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
<span class="sourceLineNo">233</span>        if (o instanceof byte[]) {<a name="line.233"></a>
<span class="sourceLineNo">234</span>            return toString((byte[]) o);<a name="line.234"></a>
<span class="sourceLineNo">235</span>        } else if (o instanceof char[]) {<a name="line.235"></a>
<span class="sourceLineNo">236</span>            return new String((char[]) o);<a name="line.236"></a>
<span class="sourceLineNo">237</span>        } else if (o instanceof String) {<a name="line.237"></a>
<span class="sourceLineNo">238</span>            return (String) o;<a name="line.238"></a>
<span class="sourceLineNo">239</span>        } else {<a name="line.239"></a>
<span class="sourceLineNo">240</span>            return objectToString(o);<a name="line.240"></a>
<span class="sourceLineNo">241</span>        }<a name="line.241"></a>
<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
<span class="sourceLineNo">243</span><a name="line.243"></a>
<span class="sourceLineNo">244</span>    protected byte[] toBytes(File file) {<a name="line.244"></a>
<span class="sourceLineNo">245</span>        if (file == null) {<a name="line.245"></a>
<span class="sourceLineNo">246</span>            throw new IllegalArgumentException("File argument cannot be null.");<a name="line.246"></a>
<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
<span class="sourceLineNo">249</span>            return toBytes(new FileInputStream(file));<a name="line.249"></a>
<span class="sourceLineNo">250</span>        } catch (FileNotFoundException e) {<a name="line.250"></a>
<span class="sourceLineNo">251</span>            String msg = "Unable to acquire InputStream for file [" + file + "]";<a name="line.251"></a>
<span class="sourceLineNo">252</span>            throw new CodecException(msg, e);<a name="line.252"></a>
<span class="sourceLineNo">253</span>        }<a name="line.253"></a>
<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
<span class="sourceLineNo">255</span><a name="line.255"></a>
<span class="sourceLineNo">256</span>    /**<a name="line.256"></a>
<span class="sourceLineNo">257</span>     * Converts the specified {@link InputStream InputStream} into a byte array.<a name="line.257"></a>
<span class="sourceLineNo">258</span>     *<a name="line.258"></a>
<span class="sourceLineNo">259</span>     * @param in the InputStream to convert to a byte array<a name="line.259"></a>
<span class="sourceLineNo">260</span>     * @return the bytes of the input stream<a name="line.260"></a>
<span class="sourceLineNo">261</span>     * @throws IllegalArgumentException if the {@code InputStream} argument is {@code null}.<a name="line.261"></a>
<span class="sourceLineNo">262</span>     * @throws CodecException           if there is any problem reading from the {@link InputStream}.<a name="line.262"></a>
<span class="sourceLineNo">263</span>     * @since 1.0<a name="line.263"></a>
<span class="sourceLineNo">264</span>     */<a name="line.264"></a>
<span class="sourceLineNo">265</span>    protected byte[] toBytes(InputStream in) {<a name="line.265"></a>
<span class="sourceLineNo">266</span>        if (in == null) {<a name="line.266"></a>
<span class="sourceLineNo">267</span>            throw new IllegalArgumentException("InputStream argument cannot be null.");<a name="line.267"></a>
<span class="sourceLineNo">268</span>        }<a name="line.268"></a>
<span class="sourceLineNo">269</span>        final int BUFFER_SIZE = 512;<a name="line.269"></a>
<span class="sourceLineNo">270</span>        ByteArrayOutputStream out = new ByteArrayOutputStream(BUFFER_SIZE);<a name="line.270"></a>
<span class="sourceLineNo">271</span>        byte[] buffer = new byte[BUFFER_SIZE];<a name="line.271"></a>
<span class="sourceLineNo">272</span>        int bytesRead;<a name="line.272"></a>
<span class="sourceLineNo">273</span>        try {<a name="line.273"></a>
<span class="sourceLineNo">274</span>            while ((bytesRead = in.read(buffer)) != -1) {<a name="line.274"></a>
<span class="sourceLineNo">275</span>                out.write(buffer, 0, bytesRead);<a name="line.275"></a>
<span class="sourceLineNo">276</span>            }<a name="line.276"></a>
<span class="sourceLineNo">277</span>            return out.toByteArray();<a name="line.277"></a>
<span class="sourceLineNo">278</span>        } catch (IOException ioe) {<a name="line.278"></a>
<span class="sourceLineNo">279</span>            throw new CodecException(ioe);<a name="line.279"></a>
<span class="sourceLineNo">280</span>        } finally {<a name="line.280"></a>
<span class="sourceLineNo">281</span>            try {<a name="line.281"></a>
<span class="sourceLineNo">282</span>                in.close();<a name="line.282"></a>
<span class="sourceLineNo">283</span>            } catch (IOException ignored) {<a name="line.283"></a>
<span class="sourceLineNo">284</span>            }<a name="line.284"></a>
<span class="sourceLineNo">285</span>            try {<a name="line.285"></a>
<span class="sourceLineNo">286</span>                out.close();<a name="line.286"></a>
<span class="sourceLineNo">287</span>            } catch (IOException ignored) {<a name="line.287"></a>
<span class="sourceLineNo">288</span>            }<a name="line.288"></a>
<span class="sourceLineNo">289</span>        }<a name="line.289"></a>
<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
<span class="sourceLineNo">292</span>    /**<a name="line.292"></a>
<span class="sourceLineNo">293</span>     * Default implementation throws a CodecException immediately since it can't infer how to convert the Object<a name="line.293"></a>
<span class="sourceLineNo">294</span>     * to a byte array.  This method must be overridden by subclasses if anything other than the three default<a name="line.294"></a>
<span class="sourceLineNo">295</span>     * types (listed in the {@link #toBytes(Object) toBytes(Object)} JavaDoc) are to be converted to a byte array.<a name="line.295"></a>
<span class="sourceLineNo">296</span>     *<a name="line.296"></a>
<span class="sourceLineNo">297</span>     * @param o the Object to convert to a byte array.<a name="line.297"></a>
<span class="sourceLineNo">298</span>     * @return a byte array representation of the Object argument.<a name="line.298"></a>
<span class="sourceLineNo">299</span>     */<a name="line.299"></a>
<span class="sourceLineNo">300</span>    protected byte[] objectToBytes(Object o) {<a name="line.300"></a>
<span class="sourceLineNo">301</span>        String msg = "The " + getClass().getName() + " implementation only supports conversion to " +<a name="line.301"></a>
<span class="sourceLineNo">302</span>                "byte[] if the source is of type byte[], char[], String, " + ByteSource.class.getName() +<a name="line.302"></a>
<span class="sourceLineNo">303</span>                " File or InputStream.  The instance provided as a method " +<a name="line.303"></a>
<span class="sourceLineNo">304</span>                "argument is of type [" + o.getClass().getName() + "].  If you would like to convert " +<a name="line.304"></a>
<span class="sourceLineNo">305</span>                "this argument type to a byte[], you can 1) convert the argument to one of the supported types " +<a name="line.305"></a>
<span class="sourceLineNo">306</span>                "yourself and then use that as the method argument or 2) subclass " + getClass().getName() +<a name="line.306"></a>
<span class="sourceLineNo">307</span>                "and override the objectToBytes(Object o) method.";<a name="line.307"></a>
<span class="sourceLineNo">308</span>        throw new CodecException(msg);<a name="line.308"></a>
<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
<span class="sourceLineNo">311</span>    /**<a name="line.311"></a>
<span class="sourceLineNo">312</span>     * Default implementation merely returns &lt;code&gt;objectArgument.toString()&lt;/code&gt;.  Subclasses can override this<a name="line.312"></a>
<span class="sourceLineNo">313</span>     * method for different mechanisms of converting an object to a String.<a name="line.313"></a>
<span class="sourceLineNo">314</span>     *<a name="line.314"></a>
<span class="sourceLineNo">315</span>     * @param o the Object to convert to a byte array.<a name="line.315"></a>
<span class="sourceLineNo">316</span>     * @return a String representation of the Object argument.<a name="line.316"></a>
<span class="sourceLineNo">317</span>     */<a name="line.317"></a>
<span class="sourceLineNo">318</span>    protected String objectToString(Object o) {<a name="line.318"></a>
<span class="sourceLineNo">319</span>        return o.toString();<a name="line.319"></a>
<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
<span class="sourceLineNo">321</span>}<a name="line.321"></a>




























































</pre>
</div>
</body>
</html>
