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




























































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