WbxmlSerializer.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:4k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2007 Esmertec AG.
  3.  * Copyright (C) 2007 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.imps;
  18. import java.io.IOException;
  19. import java.io.OutputStream;
  20. import com.android.im.imps.ImpsConstants.ImpsVersion;
  21. /*
  22.  * NOT thread-safe. Always use this in one thread.
  23.  */
  24. final class WbxmlSerializer {
  25.     private OutputStream mOut;
  26.     private int mNativeHandle;
  27.     private static int PUBLIC_ID_IMPS_12 = 0x11;
  28.     private static int PUBLIC_ID_IMPS_13 = 0x12;
  29.     public WbxmlSerializer(ImpsVersion impsVersion) {
  30.         if (impsVersion == ImpsVersion.IMPS_VERSION_12) {
  31.             mNativeHandle = nativeCreate(PUBLIC_ID_IMPS_12);
  32.         } else if (impsVersion == ImpsVersion.IMPS_VERSION_13) {
  33.             mNativeHandle = nativeCreate(PUBLIC_ID_IMPS_13);
  34.         } else {
  35.             throw new IllegalArgumentException("Unsupported IMPS version");
  36.         }
  37.         if (mNativeHandle == 0) {
  38.             throw new OutOfMemoryError();
  39.         }
  40.     }
  41.     @Override
  42.     protected void finalize() {
  43.         if (mNativeHandle != 0) {
  44.             nativeRelease(mNativeHandle);
  45.         }
  46.     }
  47.     public void reset() {
  48.         nativeReset(mNativeHandle);
  49.         mOut = null;
  50.     }
  51.     public void setOutput(OutputStream out) {
  52.         mOut = out;
  53.     }
  54.     // XXX: These should throw ParserException but the dalvik seems to have
  55.     // problem throwing non-system exceptions from JNI code. Use IAE for now
  56.     // and file a bug report for this.
  57.     public void startElement(String name, String[] atts) throws IOException,
  58.             SerializerException {
  59.         try {
  60.             nativeStartElement(mNativeHandle, name, atts);
  61.         } catch (IllegalArgumentException e) {
  62.             throw new SerializerException(e);
  63.         }
  64.     }
  65.     public void characters(String chars) throws IOException, SerializerException {
  66.         try {
  67.             nativeCharacters(mNativeHandle, chars);
  68.         } catch (IllegalArgumentException e) {
  69.             throw new SerializerException(e);
  70.         }
  71.     }
  72.     public void endElement() throws IOException, SerializerException {
  73.         try {
  74.             nativeEndElement(mNativeHandle);
  75.         } catch (IllegalArgumentException e) {
  76.             throw new SerializerException(e);
  77.         }
  78.     }
  79.     /**
  80.      * Called by native encoder to send result data.
  81.      * @param data
  82.      * @param len
  83.      * @throws IOException
  84.      */
  85.     void onWbxmlData(byte[] data, int len) throws IOException {
  86.         if (mOut != null) {
  87.             mOut.write(data, 0, len);
  88.         }
  89.     }
  90.     native int nativeCreate(int publicId);
  91.     native void nativeReset(int nativeHandle);
  92.     native void nativeRelease(int nativeHandle);
  93.     // FIXME: These should throw ParserException but the dalvik seems to have
  94.     // problem throwing non-system exceptions from JNI code. Use IAE for now
  95.     // and file a bug report for this.
  96.     native void nativeStartElement(int nativeHandle, String name, String[] atts)
  97.             throws IOException, IllegalArgumentException;
  98.     native void nativeCharacters(int nativeHandle, String characters)
  99.             throws IOException, IllegalArgumentException;
  100.     native void nativeEndElement(int nativeHandle)
  101.             throws IOException, IllegalArgumentException;
  102.     static {
  103.         try {
  104.             System.loadLibrary("wbxml_jni");
  105.         }catch(UnsatisfiedLinkError ule) {
  106.             System.err.println("WARNING: Could not load library libwbxml_jni.so");
  107.         }
  108.     }
  109. }