You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/10/08 15:43:24 UTC

svn commit: r1005820 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util: BundleReader.java BundleWriter.java

Author: jukka
Date: Fri Oct  8 13:43:24 2010
New Revision: 1005820

URL: http://svn.apache.org/viewvc?rev=1005820&view=rev
Log:
JCR-2762: Optimize bundle serialization

Move the binding version byte to the constructor for easier extensibility

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java?rev=1005820&r1=1005819&r2=1005820&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java Fri Oct  8 13:43:24 2010
@@ -48,15 +48,20 @@ class BundleReader {
 
     private final DataInputStream in;
 
+    private final int version;
+
     /**
      * Creates a new bundle deserializer.
      *
      * @param binding bundle binding
      * @param stream stream from which the bundle is read
+     * @throws IOException if an I/O error occurs.
      */
-    public BundleReader(BundleBinding binding, InputStream stream) {
+    public BundleReader(BundleBinding binding, InputStream stream)
+            throws IOException {
         this.binding = binding;
         this.in = new DataInputStream(stream);
+        this.version = in.readUnsignedByte();
     }
 
     /**
@@ -69,13 +74,11 @@ class BundleReader {
     public NodePropBundle readBundle(NodeId id) throws IOException {
         NodePropBundle bundle = new NodePropBundle(id);
 
-        // read version and primary type...special handling
-        int index = in.readInt();
-
-        // get version
-        int version = (index >> 24) & 0xff;
-        index &= 0x00ffffff;
-        String uri = binding.nsIndex.indexToString(index);
+        // read primary type...special handling
+        int a = in.readUnsignedByte();
+        int b = in.readUnsignedByte();
+        int c = in.readUnsignedByte();
+        String uri = binding.nsIndex.indexToString(a << 16 | b << 8 | c);
         String local = binding.nameIndex.indexToString(in.readInt());
         Name nodeTypeName = NameFactoryImpl.getInstance().create(uri, local);
 

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java?rev=1005820&r1=1005819&r2=1005820&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java Fri Oct  8 13:43:24 2010
@@ -54,10 +54,13 @@ class BundleWriter {
      *
      * @param binding bundle binding
      * @param stream stream to which the bundle will be written
+     * @throws IOException if an I/O error occurs.
      */
-    public BundleWriter(BundleBinding binding, OutputStream stream) {
+    public BundleWriter(BundleBinding binding, OutputStream stream)
+            throws IOException {
         this.binding = binding;
         this.out = new DataOutputStream(stream);
+        this.out.writeByte(BundleBinding.VERSION_CURRENT);
     }
 
     /**
@@ -71,10 +74,12 @@ class BundleWriter {
         long size = out.size();
 
         // primaryType and version
-        out.writeInt(
-                (BundleBinding.VERSION_CURRENT << 24)
-                | binding.nsIndex.stringToIndex(bundle.getNodeTypeName().getNamespaceURI()));
-        out.writeInt(binding.nameIndex.stringToIndex(bundle.getNodeTypeName().getLocalName()));
+        Name type = bundle.getNodeTypeName();
+        int index = binding.nsIndex.stringToIndex(type.getNamespaceURI());
+        out.writeByte(index >>> 16);
+        out.writeByte(index >>> 8);
+        out.writeByte(index);
+        out.writeInt(binding.nameIndex.stringToIndex(type.getLocalName()));
 
         // parentUUID
         writeNodeId(bundle.getParentId());