~s-friedemann/tomdroid/sshfs

« back to all changes in this revision

Viewing changes to lib/commons-codec-1.4/apidocs/src-html/org/apache/commons/codec/binary/Base64OutputStream.html

  • Committer: Guilherme Salgado
  • Date: 2010-08-31 21:44:24 UTC
  • mfrom: (185.1.51 sync-ui)
  • mto: (185.1.54 sync-ui)
  • mto: This revision was merged to the branch mainline in revision 186.
  • Revision ID: salgado@canonical.com-20100831214424-06b64zz707lwpmcl
mergeĀ lp:~tomdroid-developers/sync-ui

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<HTML>
2
 
<BODY BGCOLOR="white">
3
 
<PRE>
4
 
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
5
 
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
6
 
<FONT color="green">003</FONT>     * contributor license agreements.  See the NOTICE file distributed with<a name="line.3"></a>
7
 
<FONT color="green">004</FONT>     * this work for additional information regarding copyright ownership.<a name="line.4"></a>
8
 
<FONT color="green">005</FONT>     * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a>
9
 
<FONT color="green">006</FONT>     * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
10
 
<FONT color="green">007</FONT>     * the License.  You may obtain a copy of the License at<a name="line.7"></a>
11
 
<FONT color="green">008</FONT>     * <a name="line.8"></a>
12
 
<FONT color="green">009</FONT>     *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
13
 
<FONT color="green">010</FONT>     * <a name="line.10"></a>
14
 
<FONT color="green">011</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
15
 
<FONT color="green">012</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
16
 
<FONT color="green">013</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
17
 
<FONT color="green">014</FONT>     * See the License for the specific language governing permissions and<a name="line.14"></a>
18
 
<FONT color="green">015</FONT>     * limitations under the License.<a name="line.15"></a>
19
 
<FONT color="green">016</FONT>     */<a name="line.16"></a>
20
 
<FONT color="green">017</FONT>    <a name="line.17"></a>
21
 
<FONT color="green">018</FONT>    package org.apache.commons.codec.binary;<a name="line.18"></a>
22
 
<FONT color="green">019</FONT>    <a name="line.19"></a>
23
 
<FONT color="green">020</FONT>    import java.io.FilterOutputStream;<a name="line.20"></a>
24
 
<FONT color="green">021</FONT>    import java.io.IOException;<a name="line.21"></a>
25
 
<FONT color="green">022</FONT>    import java.io.OutputStream;<a name="line.22"></a>
26
 
<FONT color="green">023</FONT>    <a name="line.23"></a>
27
 
<FONT color="green">024</FONT>    /**<a name="line.24"></a>
28
 
<FONT color="green">025</FONT>     * Provides Base64 encoding and decoding in a streaming fashion (unlimited size). When encoding the default lineLength<a name="line.25"></a>
29
 
<FONT color="green">026</FONT>     * is 76 characters and the default lineEnding is CRLF, but these can be overridden by using the appropriate<a name="line.26"></a>
30
 
<FONT color="green">027</FONT>     * constructor.<a name="line.27"></a>
31
 
<FONT color="green">028</FONT>     * &lt;p&gt;<a name="line.28"></a>
32
 
<FONT color="green">029</FONT>     * The default behaviour of the Base64OutputStream is to ENCODE, whereas the default behaviour of the Base64InputStream<a name="line.29"></a>
33
 
<FONT color="green">030</FONT>     * is to DECODE. But this behaviour can be overridden by using a different constructor.<a name="line.30"></a>
34
 
<FONT color="green">031</FONT>     * &lt;/p&gt;<a name="line.31"></a>
35
 
<FONT color="green">032</FONT>     * &lt;p&gt;<a name="line.32"></a>
36
 
<FONT color="green">033</FONT>     * This class implements section &lt;cite&gt;6.8. Base64 Content-Transfer-Encoding&lt;/cite&gt; from RFC 2045 &lt;cite&gt;Multipurpose<a name="line.33"></a>
37
 
<FONT color="green">034</FONT>     * Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies&lt;/cite&gt; by Freed and Borenstein.<a name="line.34"></a>
38
 
<FONT color="green">035</FONT>     * &lt;/p&gt;<a name="line.35"></a>
39
 
<FONT color="green">036</FONT>     * &lt;p&gt;<a name="line.36"></a>
40
 
<FONT color="green">037</FONT>     * Since this class operates directly on byte streams, and not character streams, it is hard-coded to only encode/decode<a name="line.37"></a>
41
 
<FONT color="green">038</FONT>     * character encodings which are compatible with the lower 127 ASCII chart (ISO-8859-1, Windows-1252, UTF-8, etc).<a name="line.38"></a>
42
 
<FONT color="green">039</FONT>     * &lt;/p&gt;<a name="line.39"></a>
43
 
<FONT color="green">040</FONT>     * <a name="line.40"></a>
44
 
<FONT color="green">041</FONT>     * @author Apache Software Foundation<a name="line.41"></a>
45
 
<FONT color="green">042</FONT>     * @version $Id: Base64OutputStream.java 799806 2009-08-01 04:33:17Z ggregory $<a name="line.42"></a>
46
 
<FONT color="green">043</FONT>     * @see &lt;a href="http://www.ietf.org/rfc/rfc2045.txt"&gt;RFC 2045&lt;/a&gt;<a name="line.43"></a>
47
 
<FONT color="green">044</FONT>     * @since 1.4<a name="line.44"></a>
48
 
<FONT color="green">045</FONT>     */<a name="line.45"></a>
49
 
<FONT color="green">046</FONT>    public class Base64OutputStream extends FilterOutputStream {<a name="line.46"></a>
50
 
<FONT color="green">047</FONT>        private final boolean doEncode;<a name="line.47"></a>
51
 
<FONT color="green">048</FONT>    <a name="line.48"></a>
52
 
<FONT color="green">049</FONT>        private final Base64 base64;<a name="line.49"></a>
53
 
<FONT color="green">050</FONT>    <a name="line.50"></a>
54
 
<FONT color="green">051</FONT>        private final byte[] singleByte = new byte[1];<a name="line.51"></a>
55
 
<FONT color="green">052</FONT>    <a name="line.52"></a>
56
 
<FONT color="green">053</FONT>        /**<a name="line.53"></a>
57
 
<FONT color="green">054</FONT>         * Creates a Base64OutputStream such that all data written is Base64-encoded to the original provided OutputStream.<a name="line.54"></a>
58
 
<FONT color="green">055</FONT>         * <a name="line.55"></a>
59
 
<FONT color="green">056</FONT>         * @param out<a name="line.56"></a>
60
 
<FONT color="green">057</FONT>         *            OutputStream to wrap.<a name="line.57"></a>
61
 
<FONT color="green">058</FONT>         */<a name="line.58"></a>
62
 
<FONT color="green">059</FONT>        public Base64OutputStream(OutputStream out) {<a name="line.59"></a>
63
 
<FONT color="green">060</FONT>            this(out, true);<a name="line.60"></a>
64
 
<FONT color="green">061</FONT>        }<a name="line.61"></a>
65
 
<FONT color="green">062</FONT>    <a name="line.62"></a>
66
 
<FONT color="green">063</FONT>        /**<a name="line.63"></a>
67
 
<FONT color="green">064</FONT>         * Creates a Base64OutputStream such that all data written is either Base64-encoded or Base64-decoded to the<a name="line.64"></a>
68
 
<FONT color="green">065</FONT>         * original provided OutputStream.<a name="line.65"></a>
69
 
<FONT color="green">066</FONT>         * <a name="line.66"></a>
70
 
<FONT color="green">067</FONT>         * @param out<a name="line.67"></a>
71
 
<FONT color="green">068</FONT>         *            OutputStream to wrap.<a name="line.68"></a>
72
 
<FONT color="green">069</FONT>         * @param doEncode<a name="line.69"></a>
73
 
<FONT color="green">070</FONT>         *            true if we should encode all data written to us, false if we should decode.<a name="line.70"></a>
74
 
<FONT color="green">071</FONT>         */<a name="line.71"></a>
75
 
<FONT color="green">072</FONT>        public Base64OutputStream(OutputStream out, boolean doEncode) {<a name="line.72"></a>
76
 
<FONT color="green">073</FONT>            super(out);<a name="line.73"></a>
77
 
<FONT color="green">074</FONT>            this.doEncode = doEncode;<a name="line.74"></a>
78
 
<FONT color="green">075</FONT>            this.base64 = new Base64();<a name="line.75"></a>
79
 
<FONT color="green">076</FONT>        }<a name="line.76"></a>
80
 
<FONT color="green">077</FONT>    <a name="line.77"></a>
81
 
<FONT color="green">078</FONT>        /**<a name="line.78"></a>
82
 
<FONT color="green">079</FONT>         * Creates a Base64OutputStream such that all data written is either Base64-encoded or Base64-decoded to the<a name="line.79"></a>
83
 
<FONT color="green">080</FONT>         * original provided OutputStream.<a name="line.80"></a>
84
 
<FONT color="green">081</FONT>         * <a name="line.81"></a>
85
 
<FONT color="green">082</FONT>         * @param out<a name="line.82"></a>
86
 
<FONT color="green">083</FONT>         *            OutputStream to wrap.<a name="line.83"></a>
87
 
<FONT color="green">084</FONT>         * @param doEncode<a name="line.84"></a>
88
 
<FONT color="green">085</FONT>         *            true if we should encode all data written to us, false if we should decode.<a name="line.85"></a>
89
 
<FONT color="green">086</FONT>         * @param lineLength<a name="line.86"></a>
90
 
<FONT color="green">087</FONT>         *            If doEncode is true, each line of encoded data will contain lineLength characters (rounded down to<a name="line.87"></a>
91
 
<FONT color="green">088</FONT>         *            nearest multiple of 4). If lineLength &lt;=0, the encoded data is not divided into lines. If doEncode is<a name="line.88"></a>
92
 
<FONT color="green">089</FONT>         *            false, lineLength is ignored.<a name="line.89"></a>
93
 
<FONT color="green">090</FONT>         * @param lineSeparator<a name="line.90"></a>
94
 
<FONT color="green">091</FONT>         *            If doEncode is true, each line of encoded data will be terminated with this byte sequence (e.g. \r\n).<a name="line.91"></a>
95
 
<FONT color="green">092</FONT>         *            If lineLength &lt;= 0, the lineSeparator is not used. If doEncode is false lineSeparator is ignored.<a name="line.92"></a>
96
 
<FONT color="green">093</FONT>         */<a name="line.93"></a>
97
 
<FONT color="green">094</FONT>        public Base64OutputStream(OutputStream out, boolean doEncode, int lineLength, byte[] lineSeparator) {<a name="line.94"></a>
98
 
<FONT color="green">095</FONT>            super(out);<a name="line.95"></a>
99
 
<FONT color="green">096</FONT>            this.doEncode = doEncode;<a name="line.96"></a>
100
 
<FONT color="green">097</FONT>            this.base64 = new Base64(lineLength, lineSeparator);<a name="line.97"></a>
101
 
<FONT color="green">098</FONT>        }<a name="line.98"></a>
102
 
<FONT color="green">099</FONT>    <a name="line.99"></a>
103
 
<FONT color="green">100</FONT>        /**<a name="line.100"></a>
104
 
<FONT color="green">101</FONT>         * Writes the specified &lt;code&gt;byte&lt;/code&gt; to this output stream.<a name="line.101"></a>
105
 
<FONT color="green">102</FONT>         * <a name="line.102"></a>
106
 
<FONT color="green">103</FONT>         * @param i<a name="line.103"></a>
107
 
<FONT color="green">104</FONT>         *            source byte<a name="line.104"></a>
108
 
<FONT color="green">105</FONT>         * @throws IOException<a name="line.105"></a>
109
 
<FONT color="green">106</FONT>         *             if an I/O error occurs.<a name="line.106"></a>
110
 
<FONT color="green">107</FONT>         */<a name="line.107"></a>
111
 
<FONT color="green">108</FONT>        public void write(int i) throws IOException {<a name="line.108"></a>
112
 
<FONT color="green">109</FONT>            singleByte[0] = (byte) i;<a name="line.109"></a>
113
 
<FONT color="green">110</FONT>            write(singleByte, 0, 1);<a name="line.110"></a>
114
 
<FONT color="green">111</FONT>        }<a name="line.111"></a>
115
 
<FONT color="green">112</FONT>    <a name="line.112"></a>
116
 
<FONT color="green">113</FONT>        /**<a name="line.113"></a>
117
 
<FONT color="green">114</FONT>         * Writes &lt;code&gt;len&lt;/code&gt; bytes from the specified &lt;code&gt;b&lt;/code&gt; array starting at &lt;code&gt;offset&lt;/code&gt; to this<a name="line.114"></a>
118
 
<FONT color="green">115</FONT>         * output stream.<a name="line.115"></a>
119
 
<FONT color="green">116</FONT>         * <a name="line.116"></a>
120
 
<FONT color="green">117</FONT>         * @param b<a name="line.117"></a>
121
 
<FONT color="green">118</FONT>         *            source byte array<a name="line.118"></a>
122
 
<FONT color="green">119</FONT>         * @param offset<a name="line.119"></a>
123
 
<FONT color="green">120</FONT>         *            where to start reading the bytes<a name="line.120"></a>
124
 
<FONT color="green">121</FONT>         * @param len<a name="line.121"></a>
125
 
<FONT color="green">122</FONT>         *            maximum number of bytes to write<a name="line.122"></a>
126
 
<FONT color="green">123</FONT>         * <a name="line.123"></a>
127
 
<FONT color="green">124</FONT>         * @throws IOException<a name="line.124"></a>
128
 
<FONT color="green">125</FONT>         *             if an I/O error occurs.<a name="line.125"></a>
129
 
<FONT color="green">126</FONT>         * @throws NullPointerException<a name="line.126"></a>
130
 
<FONT color="green">127</FONT>         *             if the byte array parameter is null<a name="line.127"></a>
131
 
<FONT color="green">128</FONT>         * @throws IndexOutOfBoundsException<a name="line.128"></a>
132
 
<FONT color="green">129</FONT>         *             if offset, len or buffer size are invalid<a name="line.129"></a>
133
 
<FONT color="green">130</FONT>         */<a name="line.130"></a>
134
 
<FONT color="green">131</FONT>        public void write(byte b[], int offset, int len) throws IOException {<a name="line.131"></a>
135
 
<FONT color="green">132</FONT>            if (b == null) {<a name="line.132"></a>
136
 
<FONT color="green">133</FONT>                throw new NullPointerException();<a name="line.133"></a>
137
 
<FONT color="green">134</FONT>            } else if (offset &lt; 0 || len &lt; 0) {<a name="line.134"></a>
138
 
<FONT color="green">135</FONT>                throw new IndexOutOfBoundsException();<a name="line.135"></a>
139
 
<FONT color="green">136</FONT>            } else if (offset &gt; b.length || offset + len &gt; b.length) {<a name="line.136"></a>
140
 
<FONT color="green">137</FONT>                throw new IndexOutOfBoundsException();<a name="line.137"></a>
141
 
<FONT color="green">138</FONT>            } else if (len &gt; 0) {<a name="line.138"></a>
142
 
<FONT color="green">139</FONT>                if (doEncode) {<a name="line.139"></a>
143
 
<FONT color="green">140</FONT>                    base64.encode(b, offset, len);<a name="line.140"></a>
144
 
<FONT color="green">141</FONT>                } else {<a name="line.141"></a>
145
 
<FONT color="green">142</FONT>                    base64.decode(b, offset, len);<a name="line.142"></a>
146
 
<FONT color="green">143</FONT>                }<a name="line.143"></a>
147
 
<FONT color="green">144</FONT>                flush(false);<a name="line.144"></a>
148
 
<FONT color="green">145</FONT>            }<a name="line.145"></a>
149
 
<FONT color="green">146</FONT>        }<a name="line.146"></a>
150
 
<FONT color="green">147</FONT>    <a name="line.147"></a>
151
 
<FONT color="green">148</FONT>        /**<a name="line.148"></a>
152
 
<FONT color="green">149</FONT>         * Flushes this output stream and forces any buffered output bytes to be written out to the stream. If propogate is<a name="line.149"></a>
153
 
<FONT color="green">150</FONT>         * true, the wrapped stream will also be flushed.<a name="line.150"></a>
154
 
<FONT color="green">151</FONT>         * <a name="line.151"></a>
155
 
<FONT color="green">152</FONT>         * @param propogate<a name="line.152"></a>
156
 
<FONT color="green">153</FONT>         *            boolean flag to indicate whether the wrapped OutputStream should also be flushed.<a name="line.153"></a>
157
 
<FONT color="green">154</FONT>         * @throws IOException<a name="line.154"></a>
158
 
<FONT color="green">155</FONT>         *             if an I/O error occurs.<a name="line.155"></a>
159
 
<FONT color="green">156</FONT>         */<a name="line.156"></a>
160
 
<FONT color="green">157</FONT>        private void flush(boolean propogate) throws IOException {<a name="line.157"></a>
161
 
<FONT color="green">158</FONT>            int avail = base64.avail();<a name="line.158"></a>
162
 
<FONT color="green">159</FONT>            if (avail &gt; 0) {<a name="line.159"></a>
163
 
<FONT color="green">160</FONT>                byte[] buf = new byte[avail];<a name="line.160"></a>
164
 
<FONT color="green">161</FONT>                int c = base64.readResults(buf, 0, avail);<a name="line.161"></a>
165
 
<FONT color="green">162</FONT>                if (c &gt; 0) {<a name="line.162"></a>
166
 
<FONT color="green">163</FONT>                    out.write(buf, 0, c);<a name="line.163"></a>
167
 
<FONT color="green">164</FONT>                }<a name="line.164"></a>
168
 
<FONT color="green">165</FONT>            }<a name="line.165"></a>
169
 
<FONT color="green">166</FONT>            if (propogate) {<a name="line.166"></a>
170
 
<FONT color="green">167</FONT>                out.flush();<a name="line.167"></a>
171
 
<FONT color="green">168</FONT>            }<a name="line.168"></a>
172
 
<FONT color="green">169</FONT>        }<a name="line.169"></a>
173
 
<FONT color="green">170</FONT>    <a name="line.170"></a>
174
 
<FONT color="green">171</FONT>        /**<a name="line.171"></a>
175
 
<FONT color="green">172</FONT>         * Flushes this output stream and forces any buffered output bytes to be written out to the stream.<a name="line.172"></a>
176
 
<FONT color="green">173</FONT>         * <a name="line.173"></a>
177
 
<FONT color="green">174</FONT>         * @throws IOException<a name="line.174"></a>
178
 
<FONT color="green">175</FONT>         *             if an I/O error occurs.<a name="line.175"></a>
179
 
<FONT color="green">176</FONT>         */<a name="line.176"></a>
180
 
<FONT color="green">177</FONT>        public void flush() throws IOException {<a name="line.177"></a>
181
 
<FONT color="green">178</FONT>            flush(true);<a name="line.178"></a>
182
 
<FONT color="green">179</FONT>        }<a name="line.179"></a>
183
 
<FONT color="green">180</FONT>    <a name="line.180"></a>
184
 
<FONT color="green">181</FONT>        /**<a name="line.181"></a>
185
 
<FONT color="green">182</FONT>         * Closes this output stream and releases any system resources associated with the stream.<a name="line.182"></a>
186
 
<FONT color="green">183</FONT>         * <a name="line.183"></a>
187
 
<FONT color="green">184</FONT>         * @throws IOException<a name="line.184"></a>
188
 
<FONT color="green">185</FONT>         *             if an I/O error occurs.<a name="line.185"></a>
189
 
<FONT color="green">186</FONT>         */<a name="line.186"></a>
190
 
<FONT color="green">187</FONT>        public void close() throws IOException {<a name="line.187"></a>
191
 
<FONT color="green">188</FONT>            // Notify encoder of EOF (-1).<a name="line.188"></a>
192
 
<FONT color="green">189</FONT>            if (doEncode) {<a name="line.189"></a>
193
 
<FONT color="green">190</FONT>                base64.encode(singleByte, 0, -1);<a name="line.190"></a>
194
 
<FONT color="green">191</FONT>            } else {<a name="line.191"></a>
195
 
<FONT color="green">192</FONT>                base64.decode(singleByte, 0, -1);<a name="line.192"></a>
196
 
<FONT color="green">193</FONT>            }<a name="line.193"></a>
197
 
<FONT color="green">194</FONT>            flush();<a name="line.194"></a>
198
 
<FONT color="green">195</FONT>            out.close();<a name="line.195"></a>
199
 
<FONT color="green">196</FONT>        }<a name="line.196"></a>
200
 
<FONT color="green">197</FONT>    <a name="line.197"></a>
201
 
<FONT color="green">198</FONT>    }<a name="line.198"></a>
202
 
 
203
 
 
204
 
 
205
 
 
206
 
 
207
 
 
208
 
 
209
 
 
210
 
 
211
 
 
212
 
 
213
 
 
214
 
 
215
 
 
216
 
 
217
 
 
218
 
 
219
 
 
220
 
 
221
 
 
222
 
 
223
 
 
224
 
 
225
 
 
226
 
 
227
 
 
228
 
 
229
 
 
230
 
 
231
 
 
232
 
 
233
 
 
234
 
 
235
 
 
236
 
 
237
 
 
238
 
 
239
 
 
240
 
 
241
 
 
242
 
 
243
 
 
244
 
 
245
 
 
246
 
 
247
 
 
248
 
 
249
 
 
250
 
 
251
 
 
252
 
 
253
 
 
254
 
 
255
 
 
256
 
 
257
 
 
258
 
 
259
 
 
260
 
 
261
 
 
262
 
</PRE>
263
 
</BODY>
264
 
</HTML>