View Javadoc
1   package nom.tam.util;
2   
3   import java.io.DataOutput;
4   
5   /*
6    * #%L
7    * nom.tam FITS library
8    * %%
9    * Copyright (C) 2004 - 2024 nom-tam-fits
10   * %%
11   * This is free and unencumbered software released into the public domain.
12   *
13   * Anyone is free to copy, modify, publish, use, compile, sell, or
14   * distribute this software, either in source code form or as a compiled
15   * binary, for any purpose, commercial or non-commercial, and by any
16   * means.
17   *
18   * In jurisdictions that recognize copyright laws, the author or authors
19   * of this software dedicate any and all copyright interest in the
20   * software to the public domain. We make this dedication for the benefit
21   * of the public at large and to the detriment of our heirs and
22   * successors. We intend this dedication to be an overt act of
23   * relinquishment in perpetuity of all present and future rights to this
24   * software under copyright law.
25   *
26   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
29   * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
30   * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
31   * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
32   * OTHER DEALINGS IN THE SOFTWARE.
33   * #L%
34   */
35  
36  import java.io.IOException;
37  
38  /**
39   * Interface for writing array data to outputs.
40   */
41  public interface ArrayDataOutput extends OutputWriter, DataOutput, FitsIO {
42  
43      /**
44       * Flush the output buffer
45       *
46       * @throws IOException if the flush of the underlying stream failed
47       */
48      void flush() throws IOException;
49  
50      /**
51       * Write an array of boolean's.
52       *
53       * @param  buf         array of boolean's.
54       *
55       * @throws IOException if one of the underlying write operations failed
56       */
57      default void write(boolean[] buf) throws IOException {
58          write(buf, 0, buf.length);
59      }
60  
61      /**
62       * Write a segment of an array of boolean's.
63       *
64       * @param  buf         array of boolean's.
65       * @param  offset      start index in the array
66       * @param  size        number of array elements to write
67       *
68       * @throws IOException if one of the underlying write operations failed
69       */
70      void write(boolean[] buf, int offset, int size) throws IOException;
71  
72      /**
73       * Write an array of booleans, including legal <code>null</code> values.
74       *
75       * @param  buf         array of booleans.
76       *
77       * @throws IOException if one of the underlying write operations failed
78       *
79       * @since              1.16
80       */
81      default void write(Boolean[] buf) throws IOException {
82          write(buf, 0, buf.length);
83      }
84  
85      /**
86       * Write a segment of an array of booleans, possibly including legal <code>null</code> values. The method has a
87       * default implementation, which calls {@link #writeBoolean(boolean)} element by element. Classes that implement
88       * this interface might want to replace that with a more efficient block read implementation/
89       *
90       * @param  buf         array of booleans.
91       * @param  offset      start index in the array
92       * @param  size        number of array elements to write
93       *
94       * @throws IOException if one of the underlying write operations failed
95       *
96       * @since              1.16
97       */
98      default void write(Boolean[] buf, int offset, int size) throws IOException {
99          int to = offset + size;
100 
101         for (int i = offset; i < to; i++) {
102             writeBoolean(buf[i].booleanValue());
103         }
104     }
105 
106     /**
107      * Write an array of char's.
108      *
109      * @param  buf         array of char's.
110      *
111      * @throws IOException if one of the underlying write operations failed
112      */
113     default void write(char[] buf) throws IOException {
114         write(buf, 0, buf.length);
115     }
116 
117     /**
118      * Write a segment of an array of char's.
119      *
120      * @param  buf         array of char's.
121      * @param  offset      start index in the array
122      * @param  size        number of array elements to write
123      *
124      * @throws IOException if one of the underlying write operations failed
125      */
126     void write(char[] buf, int offset, int size) throws IOException;
127 
128     /**
129      * Write an array of double's.
130      *
131      * @param  buf         array of double's.
132      *
133      * @throws IOException if one of the underlying write operations failed
134      */
135     default void write(double[] buf) throws IOException {
136         write(buf, 0, buf.length);
137     }
138 
139     /**
140      * Write a segment of an array of double's.
141      *
142      * @param  buf         array of double's.
143      * @param  offset      start index in the array
144      * @param  size        number of array elements to write
145      *
146      * @throws IOException if one of the underlying write operations failed
147      */
148     void write(double[] buf, int offset, int size) throws IOException;
149 
150     /**
151      * Write an array of float's.
152      *
153      * @param  buf         array of float's.
154      *
155      * @throws IOException if one of the underlying write operations failed
156      */
157     default void write(float[] buf) throws IOException {
158         write(buf, 0, buf.length);
159     }
160 
161     /**
162      * Write a segment of an array of float's.
163      *
164      * @param  buf         array of float's.
165      * @param  offset      start index in the array
166      * @param  size        number of array elements to write
167      *
168      * @throws IOException if one of the underlying write operations failed
169      */
170     void write(float[] buf, int offset, int size) throws IOException;
171 
172     /**
173      * Write an array of int's.
174      *
175      * @param  buf         array of int's
176      *
177      * @throws IOException if one of the underlying write operations failed
178      */
179     default void write(int[] buf) throws IOException {
180         write(buf, 0, buf.length);
181     }
182 
183     /**
184      * Write a segment of an array of int's.
185      *
186      * @param  buf         array of int's
187      * @param  offset      start index in the array
188      * @param  size        number of array elements to write
189      *
190      * @throws IOException if one of the underlying write operations failed
191      */
192     void write(int[] buf, int offset, int size) throws IOException;
193 
194     /**
195      * Write an array of longs.
196      *
197      * @param  buf         array of longs
198      *
199      * @throws IOException if one of the underlying write operations failed
200      */
201     default void write(long[] buf) throws IOException {
202         write(buf, 0, buf.length);
203     }
204 
205     /**
206      * Write a segment of an array of longs.
207      *
208      * @param  buf         array of longs
209      * @param  offset      start index in the array
210      * @param  size        number of array elements to write
211      *
212      * @throws IOException if one of the underlying write operations failed
213      */
214     void write(long[] buf, int offset, int size) throws IOException;
215 
216     /**
217      * Write an array of shorts.
218      *
219      * @param  buf         the value to write
220      *
221      * @throws IOException if one of the underlying write operations failed
222      */
223     default void write(short[] buf) throws IOException {
224         write(buf, 0, buf.length);
225     }
226 
227     /**
228      * Write a segment of an array of shorts.
229      *
230      * @param  buf         the value to write
231      * @param  offset      start index in the array
232      * @param  size        number of array elements to write
233      *
234      * @throws IOException if one of the underlying write operations failed
235      */
236     void write(short[] buf, int offset, int size) throws IOException;
237 
238     /**
239      * Write an array of Strings. Equivalent to calling writeBytes for the selected elements.
240      *
241      * @param  buf         the array to write
242      *
243      * @throws IOException if one of the underlying write operations failed
244      */
245     default void write(String[] buf) throws IOException {
246         write(buf, 0, buf.length);
247     }
248 
249     /**
250      * Write a segment of an array of Strings. Equivalent to calling writeBytes for the selected elements.
251      *
252      * @param  buf         the array to write
253      * @param  offset      start index in the array
254      * @param  size        number of array elements to write
255      *
256      * @throws IOException if one of the underlying write operations failed
257      */
258     void write(String[] buf, int offset, int size) throws IOException;
259 
260     /**
261      * Writes the contents of a Java array to the output translating the data to the required binary representation. The
262      * argument may be a generic Java array, including multi-dimensional arrays and heterogeneous arrays of arrays.
263      *
264      * @param  o                        the Java array, including heterogeneous arrays of arrays. If <code>null</code>
265      *                                      nothing will be written to the output.
266      *
267      * @throws IOException              if there was an IO error writing to the output
268      * @throws IllegalArgumentException if the supplied object is not a Java array or if it contains Java types that are
269      *                                      not supported by the encoder.
270      */
271     void writeArray(Object o) throws IOException, IllegalArgumentException;
272 
273 }