Пример #1
0
        /// <summary> Return a byte array with namespace compensation
        /// witht the orginal encoding format
        /// </summary>
        /// <returns>
        ///
        /// </returns>
        public byte[] toBytes()
        {
            byte[] ba = new byte[Size];

            int os  = (int)l;
            int len = (int)(l >> 32);
            int os1 = 0;

            byte[] xml = vn.getXML().getBytes();
            if (stLen == 0)
            {
                Array.Copy(xml, os, ba, 0, len);
                return(ba);
            }
            int enc  = vn.getEncoding();
            int temp = 0;

            switch (enc)
            {
            case VTDNav.FORMAT_UTF_16BE:
            case VTDNav.FORMAT_UTF_16LE: temp = (stLen + 1) << 1; break;

            default:
                temp = stLen + 1;
                break;
            }
            Array.Copy(xml, os, ba, 0, temp);

            //namespace compensation
            os1 += temp;

            int tos = 0, tlen = 0;

            for (int i = 0; i < fib.size_Renamed_Field; i++)
            {
                //System.out.println("i ==>"+fib.intAt(i));
                switch (enc)
                {
                case VTDNav.FORMAT_UTF_16BE:

                    Array.Copy(ws, 0, ba, os1, 2);
                    os1 += 2;
                    tos  = vn.getTokenOffset(fib.intAt(i)) << 1;
                    tlen = (vn.getTokenLength(fib.intAt(i)) & 0xffff) << 1;
                    Array.Copy(xml, tos, ba, os1, tlen);
                    os1 += tlen;

                    Array.Copy(ws, 2, ba, os1, 2);
                    os1 += 2;
                    tos  = (vn.getTokenOffset(fib.intAt(i) + 1) - 1) << 1;
                    tlen = ((vn.getTokenLength(fib.intAt(i) + 1) & 0xffff) + 2) << 1;
                    Array.Copy(xml, tos, ba, os1, tlen);
                    os1 += tlen;
                    break;

                case VTDNav.FORMAT_UTF_16LE:

                    Array.Copy(ws, 1, ba, os1, 2);
                    os1 += 2;
                    tos  = vn.getTokenOffset(fib.intAt(i)) << 1;
                    tlen = (vn.getTokenLength(fib.intAt(i)) & 0xffff) << 1;
                    Array.Copy(xml, tos, ba, os1, tlen);
                    os1 += tlen;

                    Array.Copy(ws, 3, ba, os1, 2);
                    os1 += 2;
                    tos  = (vn.getTokenOffset(fib.intAt(i) + 1) - 1) << 1;
                    tlen = ((vn.getTokenLength(fib.intAt(i) + 1) & 0xffff) + 2) << 1;
                    Array.Copy(xml, tos, ba, os1, tlen);
                    os1 += tlen;
                    break;

                default:

                    Array.Copy(ws, 1, ba, os1, 1);
                    os1++;
                    tos  = vn.getTokenOffset(fib.intAt(i));
                    tlen = (vn.getTokenLength(fib.intAt(i)) & 0xffff);
                    Array.Copy(xml, tos, ba, os1, tlen);
                    os1 += tlen;
                    Array.Copy(ws, 3, ba, os1, 1);

                    os1++;
                    tos  = vn.getTokenOffset(fib.intAt(i) + 1) - 1;
                    tlen = (vn.getTokenLength(fib.intAt(i) + 1) & 0xffff) + 2;
                    Array.Copy(xml, tos, ba, os1, tlen);
                    os1 += tlen;
                    break;
                }
            }
            switch (enc)
            {
            case VTDNav.FORMAT_UTF_16BE:
            case VTDNav.FORMAT_UTF_16LE:
                temp = (stLen + 1) << 1; break;

            default:
                temp = stLen + 1;
                break;
            }
            Array.Copy(xml, os + temp, ba, os1, len - temp);
            return(ba);
        }