CreateJavaOutputStreamAdaptor.h revision ca32021b43f326af7d3f4ae041f8db297f98a518
1#ifndef CreateJavaOutputStream_DEFINED
2#define CreateJavaOutputStream_DEFINED
3
4//#include <android_runtime/AndroidRuntime.h>
5#include "jni.h"
6
7namespace android {
8    class AssetStreamAdaptor;
9}
10
11class SkMemoryStream;
12class SkStream;
13class SkStreamRewindable;
14class SkWStream;
15
16/**
17 *  Return an adaptor from a Java InputStream to an SkStream.
18 *  @param env JNIEnv object.
19 *  @param stream Pointer to Java InputStream.
20 *  @param storage Java byte array for retrieving data from the
21 *      Java InputStream.
22 *  @return SkStream Simple subclass of SkStream which supports its
23 *      basic methods like reading. Only valid until the calling
24 *      function returns, since the Java InputStream is not managed
25 *      by the SkStream.
26 */
27SkStream* WrapJavaInputStream(JNIEnv* env, jobject stream,
28                              jbyteArray storage);
29
30/**
31 *  Copy a Java InputStream.
32 *  @param env JNIEnv object.
33 *  @param stream Pointer to Java InputStream.
34 *  @param storage Java byte array for retrieving data from the
35 *      Java InputStream.
36 *  @return SkMemoryStream The data in stream will be copied to a new
37 *      SkMemoryStream.
38 *  FIXME: Could return a more generic return type if ViewStateSerializer
39 *  did not require an SkMemoryStream.
40 */
41SkMemoryStream* CopyJavaInputStream(JNIEnv* env, jobject stream,
42                                    jbyteArray storage);
43
44/**
45 *  Get a rewindable stream from a Java InputStream.
46 *  @param env JNIEnv object.
47 *  @param stream Pointer to Java InputStream.
48 *  @param storage Java byte array for retrieving data from the
49 *      Java InputStream.
50 *  @return SkStreamRewindable Either a wrapper around the Java
51 *      InputStream, if possible, or a copy which is rewindable.
52 *      Since it may be a wrapper, must not be used after the
53 *      caller returns, like the result of WrapJavaInputStream.
54 */
55SkStreamRewindable* GetRewindableStream(JNIEnv* env, jobject stream,
56                                        jbyteArray storage);
57
58/**
59 *  If the Java InputStream is an AssetInputStream, return an adaptor.
60 *  This should not be used after the calling function returns, since
61 *  the caller may close the asset. Returns NULL if the stream is
62 *  not an AssetInputStream.
63 *  @param env JNIEnv object.
64 *  @param stream Pointer to Java InputStream.
65 *  @return AssetStreamAdaptor representing the InputStream, or NULL.
66 *      Must not be held onto.
67 */
68android::AssetStreamAdaptor* CheckForAssetStream(JNIEnv* env, jobject stream);
69
70SkWStream* CreateJavaOutputStreamAdaptor(JNIEnv* env, jobject stream,
71                                         jbyteArray storage);
72
73#endif
74