summaryrefslogtreecommitdiff
path: root/isoparser/src/main/java/com/coremedia/iso/.svn
diff options
context:
space:
mode:
Diffstat (limited to 'isoparser/src/main/java/com/coremedia/iso/.svn')
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/all-wcprops77
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/entries442
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/AbstractBoxParser.java.svn-base130
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Ascii.java.svn-base47
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/BoxParser.java.svn-base31
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/ChannelHelper.java.svn-base90
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Hex.java.svn-base58
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoFile.java.svn-base195
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeReader.java.svn-base147
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeReaderVariable.java.svn-base39
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeWriter.java.svn-base95
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeWriterVariable.java.svn-base45
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/PropertyBoxParserImpl.java.svn-base199
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Utf8.java.svn-base59
14 files changed, 0 insertions, 1654 deletions
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/all-wcprops b/isoparser/src/main/java/com/coremedia/iso/.svn/all-wcprops
deleted file mode 100644
index 9b50c5a..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/all-wcprops
+++ /dev/null
@@ -1,77 +0,0 @@
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/777/trunk/isoparser/src/main/java/com/coremedia/iso
-END
-IsoTypeReader.java
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/659/trunk/isoparser/src/main/java/com/coremedia/iso/IsoTypeReader.java
-END
-IsoTypeWriterVariable.java
-K 25
-svn:wc:ra_dav:version-url
-V 92
-/svn/!svn/ver/426/trunk/isoparser/src/main/java/com/coremedia/iso/IsoTypeWriterVariable.java
-END
-Hex.java
-K 25
-svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/619/trunk/isoparser/src/main/java/com/coremedia/iso/Hex.java
-END
-IsoTypeReaderVariable.java
-K 25
-svn:wc:ra_dav:version-url
-V 92
-/svn/!svn/ver/419/trunk/isoparser/src/main/java/com/coremedia/iso/IsoTypeReaderVariable.java
-END
-BoxParser.java
-K 25
-svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/419/trunk/isoparser/src/main/java/com/coremedia/iso/BoxParser.java
-END
-Utf8.java
-K 25
-svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/419/trunk/isoparser/src/main/java/com/coremedia/iso/Utf8.java
-END
-Ascii.java
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/419/trunk/isoparser/src/main/java/com/coremedia/iso/Ascii.java
-END
-ChannelHelper.java
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/505/trunk/isoparser/src/main/java/com/coremedia/iso/ChannelHelper.java
-END
-IsoTypeWriter.java
-K 25
-svn:wc:ra_dav:version-url
-V 84
-/svn/!svn/ver/692/trunk/isoparser/src/main/java/com/coremedia/iso/IsoTypeWriter.java
-END
-AbstractBoxParser.java
-K 25
-svn:wc:ra_dav:version-url
-V 88
-/svn/!svn/ver/505/trunk/isoparser/src/main/java/com/coremedia/iso/AbstractBoxParser.java
-END
-IsoFile.java
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/742/trunk/isoparser/src/main/java/com/coremedia/iso/IsoFile.java
-END
-PropertyBoxParserImpl.java
-K 25
-svn:wc:ra_dav:version-url
-V 92
-/svn/!svn/ver/505/trunk/isoparser/src/main/java/com/coremedia/iso/PropertyBoxParserImpl.java
-END
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/entries b/isoparser/src/main/java/com/coremedia/iso/.svn/entries
deleted file mode 100644
index 0114cad..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/entries
+++ /dev/null
@@ -1,442 +0,0 @@
-10
-
-dir
-778
-http://mp4parser.googlecode.com/svn/trunk/isoparser/src/main/java/com/coremedia/iso
-http://mp4parser.googlecode.com/svn
-
-
-
-2012-09-10T14:56:10.036617Z
-777
-sebastian.annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-7decde4b-c250-0410-a0da-51896bc88be6
-
-IsoTypeReader.java
-file
-
-
-
-
-2012-09-14T17:27:53.147256Z
-1b3832056109e2538ddb064410e145a3
-2012-06-06T10:36:53.498661Z
-659
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4181
-
-IsoTypeWriterVariable.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-dc08bcfd952e251e81f54d6876cf2822
-2012-03-12T12:55:40.927472Z
-426
-hoemmagnus@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1471
-
-boxes
-dir
-
-Hex.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-834508c38dadb7747ba2a9e611a29f75
-2012-05-20T18:32:15.672660Z
-619
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2026
-
-mdta
-dir
-
-IsoTypeReaderVariable.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-a2e5fe2ff8d860e485a09fe069b23b67
-2012-03-11T20:58:41.111953Z
-419
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1283
-
-BoxParser.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-7ffb4de0f5409f6be08384c50ed1f239
-2012-03-11T20:58:41.111953Z
-419
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1089
-
-Utf8.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-7e580cd68183dc1f3927fb0866b2030b
-2012-03-11T20:58:41.111953Z
-419
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1712
-
-Ascii.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-30e0990932cfaaf6df4603a5aabbd724
-2012-03-11T20:58:41.111953Z
-419
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1274
-
-ChannelHelper.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-363efdcb385f027569cf4748273c9533
-2012-04-21T21:18:31.685061Z
-505
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2750
-
-IsoTypeWriter.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-746a167bf3de7edb454855bed18ec21b
-2012-06-25T03:13:15.796438Z
-692
-michael.stattmann@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2840
-
-AbstractBoxParser.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-e5bf90052f2d10b984827de45560b8b8
-2012-04-21T21:18:31.685061Z
-505
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4828
-
-IsoFile.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-fa74e86d8e2f3f19c2a91319ee286b38
-2012-08-12T09:16:02.229115Z
-742
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5567
-
-PropertyBoxParserImpl.java
-file
-
-
-
-
-2012-09-14T17:27:53.157256Z
-e93996880a8025f186a835bbff195141
-2012-04-21T21:18:31.685061Z
-505
-Sebastian.Annies@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-7247
-
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/AbstractBoxParser.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/AbstractBoxParser.java.svn-base
deleted file mode 100644
index 6d92acd..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/AbstractBoxParser.java.svn-base
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import com.coremedia.iso.boxes.Box;
-import com.coremedia.iso.boxes.ContainerBox;
-import com.coremedia.iso.boxes.UserBox;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.channels.ReadableByteChannel;
-import java.util.logging.Logger;
-
-import static com.googlecode.mp4parser.util.CastUtils.l2i;
-
-/**
- * This BoxParser handles the basic stuff like reading size and extracting box type.
- */
-public abstract class AbstractBoxParser implements BoxParser {
-
- private static Logger LOG = Logger.getLogger(AbstractBoxParser.class.getName());
-
- public abstract Box createBox(String type, byte[] userType, String parent);
-
- /**
- * Parses the next size and type, creates a box instance and parses the box's content.
- *
- * @param byteChannel the FileChannel pointing to the ISO file
- * @param parent the current box's parent (null if no parent)
- * @return the box just parsed
- * @throws java.io.IOException if reading from <code>in</code> fails
- */
- public Box parseBox(ReadableByteChannel byteChannel, ContainerBox parent) throws IOException {
-
-
- ByteBuffer header = ChannelHelper.readFully(byteChannel, 8);
-
- long size = IsoTypeReader.readUInt32(header);
- // do plausibility check
- if (size < 8 && size > 1) {
- LOG.severe("Plausibility check failed: size < 8 (size = " + size + "). Stop parsing!");
- return null;
- }
-
-
- String type = IsoTypeReader.read4cc(header);
- byte[] usertype = null;
- long contentSize;
-
- if (size == 1) {
- ByteBuffer bb = ByteBuffer.allocate(8);
- byteChannel.read(bb);
- bb.rewind();
- size = IsoTypeReader.readUInt64(bb);
- contentSize = size - 16;
- } else if (size == 0) {
- if (byteChannel instanceof FileChannel) {
- size = ((FileChannel) byteChannel).size() - ((FileChannel) byteChannel).position() - 8;
- } else {
- throw new RuntimeException("Only FileChannel inputs may use size == 0 (box reaches to the end of file)");
- }
- contentSize = size - 8;
- } else {
- contentSize = size - 8;
- }
- if (UserBox.TYPE.equals(type)) {
- ByteBuffer bb = ByteBuffer.allocate(16);
- byteChannel.read(bb);
- bb.rewind();
- usertype = bb.array();
- contentSize -= 16;
- }
- Box box = createBox(type, usertype, parent.getType());
- box.setParent(parent);
- LOG.finest("Parsing " + box.getType());
- // System.out.println("parsing " + Arrays.toString(box.getType()) + " " + box.getClass().getName() + " size=" + size);
-
-
- if (l2i(size - contentSize) == 8) {
- // default - no large box - no uuid
- // do nothing header's already correct
- header.rewind();
- } else if (l2i(size - contentSize) == 16) {
- header = ByteBuffer.allocate(16);
- IsoTypeWriter.writeUInt32(header, 1);
- header.put(IsoFile.fourCCtoBytes(type));
- IsoTypeWriter.writeUInt64(header, size);
- } else if (l2i(size - contentSize) == 24) {
- header = ByteBuffer.allocate(24);
- IsoTypeWriter.writeUInt32(header, size);
- header.put(IsoFile.fourCCtoBytes(type));
- header.put(usertype);
- } else if (l2i(size - contentSize) == 32) {
- header = ByteBuffer.allocate(32);
- IsoTypeWriter.writeUInt32(header, size);
- header.put(IsoFile.fourCCtoBytes(type));
- IsoTypeWriter.writeUInt64(header, size);
- header.put(usertype);
- } else {
- throw new RuntimeException("I didn't expect that");
- }
-
-
- box.parse(byteChannel, header, contentSize, this);
- // System.out.println("box = " + box);
-
-
- assert size == box.getSize() :
- "Reconstructed Size is not x to the number of parsed bytes! (" +
- box.getType() + ")"
- + " Actual Box size: " + size + " Calculated size: " + box.getSize();
- return box;
- }
-
-
-}
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Ascii.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Ascii.java.svn-base
deleted file mode 100644
index 2a659d7..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Ascii.java.svn-base
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import java.io.UnsupportedEncodingException;
-
-/**
- * Converts <code>byte[]</code> -> <code>String</code> and vice versa.
- */
-public final class Ascii {
- public static byte[] convert(String s) {
- try {
- if (s != null) {
- return s.getBytes("us-ascii");
- } else {
- return null;
- }
- } catch (UnsupportedEncodingException e) {
- throw new Error(e);
- }
- }
-
- public static String convert(byte[] b) {
- try {
- if (b != null) {
- return new String(b, "us-ascii");
- } else {
- return null;
- }
- } catch (UnsupportedEncodingException e) {
- throw new Error(e);
- }
- }
-} \ No newline at end of file
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/BoxParser.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/BoxParser.java.svn-base
deleted file mode 100644
index cbe9a6f..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/BoxParser.java.svn-base
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import com.coremedia.iso.boxes.Box;
-import com.coremedia.iso.boxes.ContainerBox;
-
-import java.io.IOException;
-import java.nio.channels.ReadableByteChannel;
-
-/**
- * Basic interface to create boxes from a <code>IsoBufferWrapper</code> and its parent.
- */
-public interface BoxParser {
- Class<? extends Box> getClassForFourCc(String type, byte[] userType, String parent);
-
- Box parseBox(ReadableByteChannel in, ContainerBox parent) throws IOException;
-}
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/ChannelHelper.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/ChannelHelper.java.svn-base
deleted file mode 100644
index 2ec1d05..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/ChannelHelper.java.svn-base
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.WritableByteChannel;
-
-import static com.googlecode.mp4parser.util.CastUtils.l2i;
-
-
-public class ChannelHelper {
- public static ByteBuffer readFully(final ReadableByteChannel channel, long size) throws IOException {
-
- if (channel instanceof FileChannel && size > 1024 * 1024) {
- ByteBuffer bb = ((FileChannel) channel).map(FileChannel.MapMode.READ_ONLY, ((FileChannel) channel).position(), size);
- ((FileChannel) channel).position(((FileChannel) channel).position() + size);
- return bb;
- } else {
- ByteBuffer buf = ByteBuffer.allocate(l2i(size));
- readFully(channel, buf, buf.limit());
- buf.rewind();
- assert buf.limit() == size;
-
- return buf;
- }
-
- }
-
-
- public static void readFully(final ReadableByteChannel channel, final ByteBuffer buf)
- throws IOException {
- readFully(channel, buf, buf.remaining());
- }
-
- public static int readFully(final ReadableByteChannel channel, final ByteBuffer buf, final int length)
- throws IOException {
- int n, count = 0;
- while (-1 != (n = channel.read(buf))) {
- count += n;
- if (count == length) {
- break;
- }
- }
- if (n == -1) {
- throw new EOFException("End of file. No more boxes.");
- }
- return count;
- }
-
-
- public static void writeFully(final WritableByteChannel channel, final ByteBuffer buf)
- throws IOException {
- do {
- int written = channel.write(buf);
- if (written < 0) {
- throw new EOFException();
- }
- } while (buf.hasRemaining());
- }
-
-
- public static void close(SelectionKey key) {
- try {
- key.channel().close();
- } catch (IOException e) {
- // nop
- }
-
- }
-
-
-} \ No newline at end of file
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Hex.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Hex.java.svn-base
deleted file mode 100644
index b3d55ef..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Hex.java.svn-base
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-Extracted from commons-codec
- */
-package com.coremedia.iso;
-
-import java.io.ByteArrayOutputStream;
-
-/**
- * Converts hexadecimal Strings.
- */
-public class Hex {
- private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
-
- public static String encodeHex(byte[] data) {
- return encodeHex(data, 0);
- }
-
- public static String encodeHex(byte[] data, int group) {
- int l = data.length;
- char[] out = new char[(l << 1) + (group > 0 ? (l / group) : 0)];
- // two characters form the hex value.
- for (int i = 0, j = 0; i < l; i++) {
- if ((group > 0) && ((i % group) == 0) && j > 0) {
- out[j++] = '-';
- }
-
- out[j++] = DIGITS[(0xF0 & data[i]) >>> 4];
- out[j++] = DIGITS[0x0F & data[i]];
- }
- return new String(out);
- }
-
- public static byte[] decodeHex(String hexString) {
- ByteArrayOutputStream bas = new ByteArrayOutputStream();
- for (int i = 0; i < hexString.length(); i += 2) {
- int b = Integer.parseInt(hexString.substring(i, i + 2), 16);
- bas.write(b);
- }
- return bas.toByteArray();
- }
-}
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoFile.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoFile.java.svn-base
deleted file mode 100644
index a6f4b2b..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoFile.java.svn-base
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright 2008 CoreMedia AG, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.coremedia.iso;
-
-import com.googlecode.mp4parser.AbstractContainerBox;
-import com.coremedia.iso.boxes.Box;
-import com.coremedia.iso.boxes.MovieBox;
-import com.googlecode.mp4parser.annotations.DoNotParseDetail;
-
-import java.io.*;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.channels.WritableByteChannel;
-
-/**
- * The most upper container for ISO Boxes. It is a container box that is a file.
- * Uses IsoBufferWrapper to access the underlying file.
- */
-@DoNotParseDetail
-public class IsoFile extends AbstractContainerBox implements Closeable {
- protected BoxParser boxParser = new PropertyBoxParserImpl();
- ReadableByteChannel byteChannel;
-
- public IsoFile() {
- super("");
- }
-
- public IsoFile(File f) throws IOException {
- super("");
- this.byteChannel = new FileInputStream(f).getChannel();
- boxParser = createBoxParser();
- parse();
- }
-
- public IsoFile(ReadableByteChannel byteChannel) throws IOException {
- super("");
- this.byteChannel = byteChannel;
- boxParser = createBoxParser();
- parse();
- }
-
- public IsoFile(ReadableByteChannel byteChannel, BoxParser boxParser) throws IOException {
- super("");
- this.byteChannel = byteChannel;
- this.boxParser = boxParser;
- parse();
-
-
- }
-
- protected BoxParser createBoxParser() {
- return new PropertyBoxParserImpl();
- }
-
-
- @Override
- public void _parseDetails(ByteBuffer content) {
- // there are no details to parse we should be just file
- }
-
- public void parse(ReadableByteChannel inFC, ByteBuffer header, long contentSize, AbstractBoxParser abstractBoxParser) throws IOException {
- throw new IOException("This method is not meant to be called. Use #parse() directly.");
- }
-
- private void parse() throws IOException {
-
- boolean done = false;
- while (!done) {
- try {
- Box box = boxParser.parseBox(byteChannel, this);
- if (box != null) {
- // System.err.println(box.getType());
- boxes.add(box);
- } else {
- done = true;
- }
- } catch (EOFException e) {
- done = true;
- }
- }
- }
-
- @DoNotParseDetail
- public String toString() {
- StringBuilder buffer = new StringBuilder();
- buffer.append("IsoFile[");
- if (boxes == null) {
- buffer.append("unparsed");
- } else {
- for (int i = 0; i < boxes.size(); i++) {
- if (i > 0) {
- buffer.append(";");
- }
- buffer.append(boxes.get(i).toString());
- }
- }
- buffer.append("]");
- return buffer.toString();
- }
-
- @DoNotParseDetail
- public static byte[] fourCCtoBytes(String fourCC) {
- byte[] result = new byte[4];
- if (fourCC != null) {
- for (int i = 0; i < Math.min(4, fourCC.length()); i++) {
- result[i] = (byte) fourCC.charAt(i);
- }
- }
- return result;
- }
-
- @DoNotParseDetail
- public static String bytesToFourCC(byte[] type) {
- byte[] result = new byte[]{0, 0, 0, 0};
- if (type != null) {
- System.arraycopy(type, 0, result, 0, Math.min(type.length, 4));
- }
- try {
- return new String(result, "ISO-8859-1");
- } catch (UnsupportedEncodingException e) {
- throw new Error("Required character encoding is missing", e);
- }
- }
-
-
- @Override
- public long getNumOfBytesToFirstChild() {
- return 0;
- }
-
- @Override
- public long getSize() {
- long size = 0;
- for (Box box : boxes) {
- size += box.getSize();
- }
- return size;
- }
-
- @Override
- public IsoFile getIsoFile() {
- return this;
- }
-
-
- /**
- * Shortcut to get the MovieBox since it is often needed and present in
- * nearly all ISO 14496 files (at least if they are derived from MP4 ).
- *
- * @return the MovieBox or <code>null</code>
- */
- @DoNotParseDetail
- public MovieBox getMovieBox() {
- for (Box box : boxes) {
- if (box instanceof MovieBox) {
- return (MovieBox) box;
- }
- }
- return null;
- }
-
- public void getBox(WritableByteChannel os) throws IOException {
- for (Box box : boxes) {
-
- if (os instanceof FileChannel) {
- long startPos = ((FileChannel) os).position();
- box.getBox(os);
- long size = ((FileChannel) os).position() - startPos;
- assert size == box.getSize();
- } else {
- box.getBox(os);
- }
-
- }
- }
-
- public void close() throws IOException {
- this.byteChannel.close();
- }
-}
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeReader.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeReader.java.svn-base
deleted file mode 100644
index 6d9e86e..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeReader.java.svn-base
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-
-public final class IsoTypeReader {
-
-
- public static long readUInt32BE(ByteBuffer bb) {
- long ch1 = readUInt8(bb);
- long ch2 = readUInt8(bb);
- long ch3 = readUInt8(bb);
- long ch4 = readUInt8(bb);
- return ((ch4 << 24) + (ch3 << 16) + (ch2 << 8) + (ch1 << 0));
-
- }
-
-
- public static long readUInt32(ByteBuffer bb) {
- long i = bb.getInt();
- if (i < 0) {
- i += 1l<<32;
- }
- return i;
- }
-
- public static int readUInt24(ByteBuffer bb) {
- int result = 0;
- result += readUInt16(bb) << 8;
- result += byte2int(bb.get());
- return result;
- }
-
-
- public static int readUInt16(ByteBuffer bb) {
- int result = 0;
- result += byte2int(bb.get()) << 8;
- result += byte2int(bb.get());
- return result;
- }
-
- public static int readUInt16BE(ByteBuffer bb) {
- int result = 0;
- result += byte2int(bb.get());
- result += byte2int(bb.get()) << 8;
- return result;
- }
-
- public static int readUInt8(ByteBuffer bb) {
- return byte2int(bb.get());
- }
-
- public static int byte2int(byte b) {
- return b < 0 ? b + 256 : b;
- }
-
-
- /**
- * Reads a zero terminated UTF-8 string.
- *
- * @param byteBuffer the data source
- * @return the string readByte
- * @throws Error in case of an error in the underlying stream
- */
- public static String readString(ByteBuffer byteBuffer) {
-
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- int read;
- while ((read = byteBuffer.get()) != 0) {
- out.write(read);
- }
- return Utf8.convert(out.toByteArray());
- }
-
- public static String readString(ByteBuffer byteBuffer, int length) {
- byte[] buffer = new byte[length];
- byteBuffer.get(buffer);
- return Utf8.convert(buffer);
-
- }
-
- public static long readUInt64(ByteBuffer byteBuffer) {
- long result = 0;
- // thanks to Erik Nicolas for finding a bug! Cast to long is definitivly needed
- result += readUInt32(byteBuffer) << 32;
- if (result < 0) {
- throw new RuntimeException("I don't know how to deal with UInt64! long is not sufficient and I don't want to use BigInt");
- }
- result += readUInt32(byteBuffer);
-
- return result;
- }
-
- public static double readFixedPoint1616(ByteBuffer bb) {
- byte[] bytes = new byte[4];
- bb.get(bytes);
-
- int result = 0;
- result |= ((bytes[0] << 24) & 0xFF000000);
- result |= ((bytes[1] << 16) & 0xFF0000);
- result |= ((bytes[2] << 8) & 0xFF00);
- result |= ((bytes[3]) & 0xFF);
- return ((double) result) / 65536;
-
- }
-
- public static float readFixedPoint88(ByteBuffer bb) {
- byte[] bytes = new byte[2];
- bb.get(bytes);
- short result = 0;
- result |= ((bytes[0] << 8) & 0xFF00);
- result |= ((bytes[1]) & 0xFF);
- return ((float) result) / 256;
- }
-
- public static String readIso639(ByteBuffer bb) {
- int bits = readUInt16(bb);
- StringBuilder result = new StringBuilder();
- for (int i = 0; i < 3; i++) {
- int c = (bits >> (2 - i) * 5) & 0x1f;
- result.append((char) (c + 0x60));
- }
- return result.toString();
- }
-
- public static String read4cc(ByteBuffer bb) {
- byte[] b = new byte[4];
- bb.get(b);
- return IsoFile.bytesToFourCC(b);
- }
-
-}
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeReaderVariable.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeReaderVariable.java.svn-base
deleted file mode 100644
index a2e4681..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeReaderVariable.java.svn-base
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import java.nio.ByteBuffer;
-
-public final class IsoTypeReaderVariable {
-
- public static long read(ByteBuffer bb, int bytes) {
- switch (bytes) {
- case 1:
- return IsoTypeReader.readUInt8(bb);
- case 2:
- return IsoTypeReader.readUInt16(bb);
- case 3:
- return IsoTypeReader.readUInt24(bb);
- case 4:
- return IsoTypeReader.readUInt32(bb);
- case 8:
- return IsoTypeReader.readUInt64(bb);
- default:
- throw new RuntimeException("I don't know how to read " + bytes + " bytes");
- }
-
- }
-}
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeWriter.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeWriter.java.svn-base
deleted file mode 100644
index 6da6998..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeWriter.java.svn-base
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import java.nio.ByteBuffer;
-
-public final class IsoTypeWriter {
-
- public static void writeUInt64(ByteBuffer bb, long u) {
- bb.putLong(u);
- }
-
- public static void writeUInt32(ByteBuffer bb, long u) {
- bb.putInt((int) u);
-
- }
-
- public static void writeUInt32BE(ByteBuffer bb, long u) {
- assert u >= 0 && u <= 1L << 32 : "The given long is not in the range of uint32 (" + u + ")";
- writeUInt16BE(bb, (int) u & 0xFFFF);
- writeUInt16BE(bb, (int) ((u >> 16) & 0xFFFF));
-
- }
-
-
- public static void writeUInt24(ByteBuffer bb, int i) {
- i = i & 0xFFFFFF;
- writeUInt16(bb, i >> 8);
- writeUInt8(bb, i);
-
- }
-
-
- public static void writeUInt16(ByteBuffer bb, int i) {
- i = i & 0xFFFF;
- writeUInt8(bb, i >> 8);
- writeUInt8(bb, i & 0xFF);
- }
-
- public static void writeUInt16BE(ByteBuffer bb, int i) {
- i = i & 0xFFFF;
- writeUInt8(bb, i & 0xFF);
- writeUInt8(bb, i >> 8);
- }
-
- public static void writeUInt8(ByteBuffer bb, int i) {
- i = i & 0xFF;
- bb.put((byte) i);
- }
-
-
- public static void writeFixedPont1616(ByteBuffer bb, double v) {
- int result = (int) (v * 65536);
- bb.put((byte) ((result & 0xFF000000) >> 24));
- bb.put((byte) ((result & 0x00FF0000) >> 16));
- bb.put((byte) ((result & 0x0000FF00) >> 8));
- bb.put((byte) ((result & 0x000000FF)));
- }
-
- public static void writeFixedPont88(ByteBuffer bb, double v) {
- short result = (short) (v * 256);
- bb.put((byte) ((result & 0xFF00) >> 8));
- bb.put((byte) ((result & 0x00FF)));
- }
-
- public static void writeIso639(ByteBuffer bb, String language) {
- if (language.getBytes().length != 3) {
- throw new IllegalArgumentException("\"" + language + "\" language string isn't exactly 3 characters long!");
- }
- int bits = 0;
- for (int i = 0; i < 3; i++) {
- bits += (language.getBytes()[i] - 0x60) << (2 - i) * 5;
- }
- writeUInt16(bb, bits);
- }
-
- public static void writeUtf8String(ByteBuffer bb, String string) {
-
- bb.put(Utf8.convert(string));
- writeUInt8(bb, 0);
- }
-}
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeWriterVariable.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeWriterVariable.java.svn-base
deleted file mode 100644
index 3b3bdd4..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/IsoTypeWriterVariable.java.svn-base
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-public final class IsoTypeWriterVariable {
-
- public static void write(long v, ByteBuffer bb, int bytes) {
- switch (bytes) {
- case 1:
- IsoTypeWriter.writeUInt8(bb, (int) (v & 0xff));
- break;
- case 2:
- IsoTypeWriter.writeUInt16(bb, (int) (v & 0xffff));
- break;
- case 3:
- IsoTypeWriter.writeUInt24(bb, (int) (v & 0xffffff));
- break;
- case 4:
- IsoTypeWriter.writeUInt32(bb, v);
- break;
- case 8:
- IsoTypeWriter.writeUInt64(bb, v);
- break;
- default:
- throw new RuntimeException("I don't know how to read " + bytes + " bytes");
- }
-
- }
-}
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/PropertyBoxParserImpl.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/PropertyBoxParserImpl.java.svn-base
deleted file mode 100644
index f1bcc01..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/PropertyBoxParserImpl.java.svn-base
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import com.googlecode.mp4parser.AbstractBox;
-import com.coremedia.iso.boxes.Box;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * A Property file based BoxFactory
- */
-public class PropertyBoxParserImpl extends AbstractBoxParser {
- Properties mapping;
-
- public PropertyBoxParserImpl(String... customProperties) {
- InputStream is = new BufferedInputStream(getClass().getResourceAsStream("/isoparser-default.properties"));
- try {
- mapping = new Properties();
- try {
- mapping.load(is);
- Enumeration<URL> enumeration = Thread.currentThread().getContextClassLoader().getResources("isoparser-custom.properties");
-
- while (enumeration.hasMoreElements()) {
- URL url = enumeration.nextElement();
- InputStream customIS = new BufferedInputStream(url.openStream());
- try {
- mapping.load(customIS);
- } finally {
- customIS.close();
- }
- }
- for (String customProperty : customProperties) {
- mapping.load(new BufferedInputStream(getClass().getResourceAsStream(customProperty)));
- }
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- } finally {
- try {
- is.close();
- } catch (IOException e) {
- e.printStackTrace();
- // ignore - I can't help
- }
- }
- }
-
- public PropertyBoxParserImpl(Properties mapping) {
- this.mapping = mapping;
- }
-
- Pattern p = Pattern.compile("(.*)\\((.*?)\\)");
-
- @SuppressWarnings("unchecked")
- public Class<? extends Box> getClassForFourCc(String type, byte[] userType, String parent) {
- FourCcToBox fourCcToBox = new FourCcToBox(type, userType, parent).invoke();
- try {
- return (Class<? extends Box>) Class.forName(fourCcToBox.clazzName);
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public Box createBox(String type, byte[] userType, String parent) {
-
- FourCcToBox fourCcToBox = new FourCcToBox(type, userType, parent).invoke();
- String[] param = fourCcToBox.getParam();
- String clazzName = fourCcToBox.getClazzName();
- try {
- if (param[0].trim().length() == 0) {
- param = new String[]{};
- }
- Class clazz = Class.forName(clazzName);
-
- Class[] constructorArgsClazz = new Class[param.length];
- Object[] constructorArgs = new Object[param.length];
- for (int i = 0; i < param.length; i++) {
-
- if ("userType".equals(param[i])) {
- constructorArgs[i] = userType;
- constructorArgsClazz[i] = byte[].class;
- } else if ("type".equals(param[i])) {
- constructorArgs[i] = type;
- constructorArgsClazz[i] = String.class;
- } else if ("parent".equals(param[i])) {
- constructorArgs[i] = parent;
- constructorArgsClazz[i] = String.class;
- } else {
- throw new InternalError("No such param: " + param[i]);
- }
-
-
- }
- Constructor<AbstractBox> constructorObject;
- try {
- if (param.length > 0) {
- constructorObject = clazz.getConstructor(constructorArgsClazz);
- } else {
- constructorObject = clazz.getConstructor();
- }
-
- return constructorObject.newInstance(constructorArgs);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException(e);
- } catch (InvocationTargetException e) {
- throw new RuntimeException(e);
- } catch (InstantiationException e) {
- throw new RuntimeException(e);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
- }
-
-
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- }
-
- private class FourCcToBox {
- private String type;
- private byte[] userType;
- private String parent;
- private String clazzName;
- private String[] param;
-
- public FourCcToBox(String type, byte[] userType, String parent) {
- this.type = type;
- this.parent = parent;
- this.userType = userType;
- }
-
- public String getClazzName() {
- return clazzName;
- }
-
- public String[] getParam() {
- return param;
- }
-
- public FourCcToBox invoke() {
- String constructor;
- if (userType != null) {
- if (!"uuid".equals((type))) {
- throw new RuntimeException("we have a userType but no uuid box type. Something's wrong");
- }
- constructor = mapping.getProperty((parent) + "-uuid[" + Hex.encodeHex(userType).toUpperCase() + "]");
- if (constructor == null) {
- constructor = mapping.getProperty("uuid[" + Hex.encodeHex(userType).toUpperCase() + "]");
- }
- if (constructor == null) {
- constructor = mapping.getProperty("uuid");
- }
- } else {
- constructor = mapping.getProperty((parent) + "-" + (type));
- if (constructor == null) {
- constructor = mapping.getProperty((type));
- }
- }
- if (constructor == null) {
- constructor = mapping.getProperty("default");
- }
- if (constructor == null) {
- throw new RuntimeException("No box object found for " + type);
- }
- Matcher m = p.matcher(constructor);
- boolean matches = m.matches();
- if (!matches) {
- throw new RuntimeException("Cannot work with that constructor: " + constructor);
- }
- clazzName = m.group(1);
- param = m.group(2).split(",");
- return this;
- }
- }
-}
diff --git a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Utf8.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Utf8.java.svn-base
deleted file mode 100644
index a30497e..0000000
--- a/isoparser/src/main/java/com/coremedia/iso/.svn/text-base/Utf8.java.svn-base
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2012 Sebastian Annies, Hamburg
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.coremedia.iso;
-
-import java.io.UnsupportedEncodingException;
-
-/**
- * Converts <code>byte[]</code> -> <code>String</code> and vice versa.
- */
-public final class Utf8 {
- public static byte[] convert(String s) {
- try {
- if (s != null) {
- return s.getBytes("UTF-8");
- } else {
- return null;
- }
- } catch (UnsupportedEncodingException e) {
- throw new Error(e);
- }
- }
-
- public static String convert(byte[] b) {
- try {
- if (b != null) {
- return new String(b, "UTF-8");
- } else {
- return null;
- }
- } catch (UnsupportedEncodingException e) {
- throw new Error(e);
- }
- }
-
- public static int utf8StringLengthInBytes(String utf8) {
- try {
- if (utf8 != null) {
- return utf8.getBytes("UTF-8").length;
- } else {
- return 0;
- }
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException();
- }
- }
-}