This is an automated email from the ASF dual-hosted git repository.

nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new e5b795162ef IGNITE-25359 BinaryStreams moved to ignite-binary-impl 
(#12188)
e5b795162ef is described below

commit e5b795162ef5bd8e942424b45ebfc6dfb02aa72c
Author: Nikolay <nizhi...@apache.org>
AuthorDate: Thu Jul 17 10:06:55 2025 +0300

    IGNITE-25359 BinaryStreams moved to ignite-binary-impl (#12188)
---
 assembly/dependencies-apache-ignite-lgpl.xml       |  1 +
 assembly/dependencies-apache-ignite-slim.xml       |  1 +
 assembly/dependencies-apache-ignite.xml            |  1 +
 modules/binary/api/README.txt                      |  9 +++
 .../internal/binary/BinaryPositionReadable.java    |  0
 .../internal/binary/streams/BinaryInputStream.java |  0
 .../binary/streams/BinaryMemoryAllocatorChunk.java |  0
 .../binary/streams/BinaryOutputStream.java         |  0
 .../internal/binary/streams/BinaryStream.java      |  0
 .../internal/binary/streams/BinaryStreams.java     | 35 ++++++---
 .../binary/streams/BinaryStreamsFactory.java}      | 46 ++++-------
 modules/binary/impl/README.txt                     |  8 ++
 modules/binary/impl/pom.xml                        | 75 ++++++++++++++++++
 .../binary/streams/BinaryAbstractInputStream.java  |  0
 .../binary/streams/BinaryAbstractOutputStream.java |  0
 .../binary/streams/BinaryAbstractStream.java       |  0
 .../streams/BinaryByteBufferInputStream.java       |  0
 .../binary/streams/BinaryHeapInputStream.java      |  0
 .../binary/streams/BinaryHeapOutputStream.java     |  0
 .../binary/streams/BinaryMemoryAllocator.java      | 16 ++--
 .../binary/streams/BinaryOffheapInputStream.java   |  0
 .../binary/streams/BinaryOffheapOutputStream.java  |  0
 .../binary/streams/BinaryStreamsFactoryImpl.java   | 72 +++++++++++++++++
 ...te.internal.binary.streams.BinaryStreamsFactory |  1 +
 modules/bom/pom.xml                                |  5 ++
 .../ignite/IgniteCommonsSystemProperties.java      | 17 ++++
 .../apache/ignite/internal/util/CommonUtils.java   | 90 ++++++++++++++++++++++
 modules/core/pom.xml                               |  7 ++
 .../org/apache/ignite/IgniteSystemProperties.java  | 17 ----
 .../apache/ignite/internal/binary/BinaryUtils.java |  6 --
 .../apache/ignite/internal/util/IgniteUtils.java   | 82 --------------------
 .../internal/util/io/GridUnsafeDataInput.java      |  2 +-
 .../internal/util/io/GridUnsafeDataOutput.java     |  2 +-
 pom.xml                                            |  1 +
 34 files changed, 341 insertions(+), 153 deletions(-)

diff --git a/assembly/dependencies-apache-ignite-lgpl.xml 
b/assembly/dependencies-apache-ignite-lgpl.xml
index e976b6593e9..7d7e016459b 100644
--- a/assembly/dependencies-apache-ignite-lgpl.xml
+++ b/assembly/dependencies-apache-ignite-lgpl.xml
@@ -117,6 +117,7 @@
                 <exclude>${project.groupId}:ignite-core</exclude>
                 <exclude>${project.groupId}:ignite-commons</exclude>
                 <exclude>${project.groupId}:ignite-binary-api</exclude>
+                <exclude>${project.groupId}:ignite-binary-impl</exclude>
                 <exclude>${project.groupId}:ignite-clients</exclude>
                 <exclude>${project.groupId}:ignite-spring</exclude>
                 <exclude>${project.groupId}:ignite-tools</exclude>
diff --git a/assembly/dependencies-apache-ignite-slim.xml 
b/assembly/dependencies-apache-ignite-slim.xml
index 90d639dd39b..53676f30737 100644
--- a/assembly/dependencies-apache-ignite-slim.xml
+++ b/assembly/dependencies-apache-ignite-slim.xml
@@ -117,6 +117,7 @@
                 <exclude>${project.groupId}:ignite-core</exclude>
                 <exclude>${project.groupId}:ignite-commons</exclude>
                 <exclude>${project.groupId}:ignite-binary-api</exclude>
+                <exclude>${project.groupId}:ignite-binary-impl</exclude>
                 <exclude>${project.groupId}:ignite-clients</exclude>
                 <exclude>${project.groupId}:ignite-spring</exclude>
                 <exclude>${project.groupId}:ignite-tools</exclude>
diff --git a/assembly/dependencies-apache-ignite.xml 
b/assembly/dependencies-apache-ignite.xml
index c1560975ef0..54a200fb506 100644
--- a/assembly/dependencies-apache-ignite.xml
+++ b/assembly/dependencies-apache-ignite.xml
@@ -118,6 +118,7 @@
                 <exclude>${project.groupId}:ignite-core</exclude>
                 <exclude>${project.groupId}:ignite-commons</exclude>
                 <exclude>${project.groupId}:ignite-binary-api</exclude>
+                <exclude>${project.groupId}:ignite-binary-impl</exclude>
                 <exclude>${project.groupId}:ignite-clients</exclude>
                 <exclude>${project.groupId}:ignite-spring</exclude>
                 <exclude>${project.groupId}:ignite-tools</exclude>
diff --git a/modules/binary/api/README.txt b/modules/binary/api/README.txt
new file mode 100644
index 00000000000..3df8a0b837a
--- /dev/null
+++ b/modules/binary/api/README.txt
@@ -0,0 +1,9 @@
+Apache Ignite Binary API Module
+------------------------
+
+ignite-binary-api module is internal module to separate binary API and 
implementation.
+Other modules like ignite-core must depend on ignite-binary-api, only.
+Implementation of API in ignite-binary-impl, it added in runtime.
+
+Note, class files of this module are copied in ignite-core.jar during project 
assembly
+to ensure compatibility with previous Ignite releases.
\ No newline at end of file
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryPositionReadable.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryPositionReadable.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryPositionReadable.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryPositionReadable.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryInputStream.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryInputStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryInputStream.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryInputStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocatorChunk.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocatorChunk.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocatorChunk.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocatorChunk.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOutputStream.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOutputStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOutputStream.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOutputStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStream.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStream.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreams.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreams.java
similarity index 75%
copy from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreams.java
copy to 
modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreams.java
index 4bd1f494a72..7aa287d2ccb 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreams.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreams.java
@@ -18,11 +18,28 @@
 package org.apache.ignite.internal.binary.streams;
 
 import java.nio.ByteBuffer;
+import java.util.Iterator;
+import org.apache.ignite.internal.util.CommonUtils;
+import org.apache.ignite.internal.util.typedef.internal.A;
 
 /**
  * Utility class to provide static methods to create {@link BinaryInputStream} 
or {@link BinaryOutputStream} in different modes.
  */
 public class BinaryStreams {
+    /** Streams factory implementation. */
+    private static final BinaryStreamsFactory factory;
+
+    static {
+        Iterator<BinaryStreamsFactory> factories = 
CommonUtils.loadService(BinaryStreamsFactory.class).iterator();
+
+        A.ensure(
+            factories.hasNext(),
+            "Implementation for BinaryStreamsFactory service not found. Please 
add ignite-binary-impl to classpath"
+        );
+
+        factory = factories.next();
+    }
+
     /**
      * Create stream with pointer set at the given position.
      *
@@ -31,7 +48,7 @@ public class BinaryStreams {
      * @return Stream.
      */
     public static BinaryInputStream inputStream(byte[] data, int pos) {
-        return BinaryHeapInputStream.create(data, pos);
+        return factory.inputStream(data, pos);
     }
 
     /**
@@ -41,7 +58,7 @@ public class BinaryStreams {
      * @return Stream.
      */
     public static BinaryInputStream inputStream(byte[] data) {
-        return new BinaryHeapInputStream(data);
+        return factory.inputStream(data);
     }
 
     /**
@@ -49,7 +66,7 @@ public class BinaryStreams {
      * @return Stream.
      */
     public static BinaryInputStream inputStream(ByteBuffer buf) {
-        return new BinaryByteBufferInputStream(buf);
+        return factory.inputStream(buf);
     }
 
     /**
@@ -58,7 +75,7 @@ public class BinaryStreams {
      * @return Stream.
      */
     public static BinaryInputStream inputStream(long ptr, int cap) {
-        return new BinaryOffheapInputStream(ptr, cap);
+        return factory.inputStream(ptr, cap);
     }
 
     /**
@@ -69,7 +86,7 @@ public class BinaryStreams {
      * @return Stream.
      */
     public static BinaryInputStream inputStream(long ptr, int cap, boolean 
forceHeap) {
-        return new BinaryOffheapInputStream(ptr, cap, forceHeap);
+        return factory.inputStream(ptr, cap, forceHeap);
     }
 
     /**
@@ -79,7 +96,7 @@ public class BinaryStreams {
      * @return Binary output stream data.
      */
     public static BinaryOutputStream createPooledOutputStream(int cap, boolean 
disableAutoClose) {
-        return new BinaryHeapOutputStream(cap, 
BinaryMemoryAllocator.POOLED.chunk(), disableAutoClose);
+        return factory.createPooledOutputStream(cap, disableAutoClose);
     }
 
     /**
@@ -87,7 +104,7 @@ public class BinaryStreams {
      * @return Binary output stream data.
      */
     public static BinaryOutputStream outputStream(int cap) {
-        return new BinaryHeapOutputStream(cap);
+        return factory.outputStream(cap);
     }
 
     /**
@@ -96,13 +113,13 @@ public class BinaryStreams {
      * @return Binary output stream.
      */
     public static BinaryOutputStream outputStream(int cap, 
BinaryMemoryAllocatorChunk chunk) {
-        return new BinaryHeapOutputStream(cap, chunk);
+        return factory.outputStream(cap, chunk);
     }
 
     /**
      * @return Thread local binary memory allocator.
      */
     public static BinaryMemoryAllocatorChunk threadLocalChunk() {
-        return BinaryMemoryAllocator.THREAD_LOCAL.chunk();
+        return factory.threadLocalChunk();
     }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreams.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreamsFactory.java
similarity index 60%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreams.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreamsFactory.java
index 4bd1f494a72..ad4d7df2b26 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreams.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreamsFactory.java
@@ -18,11 +18,17 @@
 package org.apache.ignite.internal.binary.streams;
 
 import java.nio.ByteBuffer;
+import java.util.ServiceLoader;
+import org.apache.ignite.internal.util.CommonUtils;
 
 /**
- * Utility class to provide static methods to create {@link BinaryInputStream} 
or {@link BinaryOutputStream} in different modes.
+ * Binary streams factory.
+ * Implementation loaded via {@link ServiceLoader} mechanism.
+ *
+ * @see CommonUtils#loadService(Class)
+ * @see BinaryStreams
  */
-public class BinaryStreams {
+public interface BinaryStreamsFactory {
     /**
      * Create stream with pointer set at the given position.
      *
@@ -30,9 +36,7 @@ public class BinaryStreams {
      * @param pos Position.
      * @return Stream.
      */
-    public static BinaryInputStream inputStream(byte[] data, int pos) {
-        return BinaryHeapInputStream.create(data, pos);
-    }
+    public BinaryInputStream inputStream(byte[] data, int pos);
 
     /**
      * Create stream with pointer set at the given position.
@@ -40,26 +44,20 @@ public class BinaryStreams {
      * @param data Data.
      * @return Stream.
      */
-    public static BinaryInputStream inputStream(byte[] data) {
-        return new BinaryHeapInputStream(data);
-    }
+    public BinaryInputStream inputStream(byte[] data);
 
     /**
      * @param buf Buffer to wrap.
      * @return Stream.
      */
-    public static BinaryInputStream inputStream(ByteBuffer buf) {
-        return new BinaryByteBufferInputStream(buf);
-    }
+    public BinaryInputStream inputStream(ByteBuffer buf);
 
     /**
      * @param ptr Pointer.
      * @param cap Capacity.
      * @return Stream.
      */
-    public static BinaryInputStream inputStream(long ptr, int cap) {
-        return new BinaryOffheapInputStream(ptr, cap);
-    }
+    public BinaryInputStream inputStream(long ptr, int cap);
 
     /**
      * @param ptr Pointer.
@@ -68,9 +66,7 @@ public class BinaryStreams {
      *        create heap-based objects.
      * @return Stream.
      */
-    public static BinaryInputStream inputStream(long ptr, int cap, boolean 
forceHeap) {
-        return new BinaryOffheapInputStream(ptr, cap, forceHeap);
-    }
+    public BinaryInputStream inputStream(long ptr, int cap, boolean forceHeap);
 
     /**
      * @param cap Capacity.
@@ -78,31 +74,23 @@ public class BinaryStreams {
      *                         so that an explicit {@link 
BinaryOutputStream#release()} call is required.
      * @return Binary output stream data.
      */
-    public static BinaryOutputStream createPooledOutputStream(int cap, boolean 
disableAutoClose) {
-        return new BinaryHeapOutputStream(cap, 
BinaryMemoryAllocator.POOLED.chunk(), disableAutoClose);
-    }
+    public BinaryOutputStream createPooledOutputStream(int cap, boolean 
disableAutoClose);
 
     /**
      * @param cap Capacity.
      * @return Binary output stream data.
      */
-    public static BinaryOutputStream outputStream(int cap) {
-        return new BinaryHeapOutputStream(cap);
-    }
+    public BinaryOutputStream outputStream(int cap);
 
     /**
      * @param cap Capacity.
      * @param chunk Memory allocator chunk.
      * @return Binary output stream.
      */
-    public static BinaryOutputStream outputStream(int cap, 
BinaryMemoryAllocatorChunk chunk) {
-        return new BinaryHeapOutputStream(cap, chunk);
-    }
+    public BinaryOutputStream outputStream(int cap, BinaryMemoryAllocatorChunk 
chunk);
 
     /**
      * @return Thread local binary memory allocator.
      */
-    public static BinaryMemoryAllocatorChunk threadLocalChunk() {
-        return BinaryMemoryAllocator.THREAD_LOCAL.chunk();
-    }
+    public BinaryMemoryAllocatorChunk threadLocalChunk();
 }
diff --git a/modules/binary/impl/README.txt b/modules/binary/impl/README.txt
new file mode 100644
index 00000000000..ea2416062bb
--- /dev/null
+++ b/modules/binary/impl/README.txt
@@ -0,0 +1,8 @@
+Apache Ignite Binary Implementation Module
+------------------------
+
+ignite-binary-impl module is internal module to separate binary API and 
implementation.
+Other modules like ignite-core must not depend on ignite-binary-impl, and use 
ignite-binary-api.
+
+Note, class files of this module are copied in ignite-core.jar during project 
assembly
+to ensure compatibility with previous Ignite releases.
\ No newline at end of file
diff --git a/modules/binary/impl/pom.xml b/modules/binary/impl/pom.xml
new file mode 100644
index 00000000000..b56dbf5b739
--- /dev/null
+++ b/modules/binary/impl/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  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.
+-->
+
+<!--
+    POM file.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.ignite</groupId>
+        <artifactId>ignite-parent-internal</artifactId>
+        <version>${revision}</version>
+        <relativePath>../../../parent-internal/pom.xml</relativePath>
+    </parent>
+
+    <artifactId>ignite-binary-impl</artifactId>
+
+    <url>http://ignite.apache.org</url>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ignite-commons</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ignite-binary-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ignite-grid-unsafe</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.jetbrains</groupId>
+            <artifactId>annotations</artifactId>
+            <version>${jetbrains.annotations.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>2.8.2</version>
+                <configuration>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractInputStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractInputStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractInputStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractInputStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractOutputStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryAbstractStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryByteBufferInputStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryByteBufferInputStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryByteBufferInputStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryByteBufferInputStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapInputStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapInputStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapInputStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapInputStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java
similarity index 92%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java
index b2b16a1ec26..b4f24f48ae8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocator.java
@@ -19,12 +19,12 @@ package org.apache.ignite.internal.binary.streams;
 
 import java.util.ArrayDeque;
 import java.util.Arrays;
-import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.util.CommonUtils;
 
-import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
-import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK;
-import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
-import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
+import static 
org.apache.ignite.IgniteCommonsSystemProperties.IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
+import static 
org.apache.ignite.IgniteCommonsSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK;
+import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
+import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
 
 /**
  * On-heap memory allocator.
@@ -129,7 +129,7 @@ abstract class BinaryMemoryAllocator {
 
                 long nowNanos = System.nanoTime();
 
-                if (U.nanosToMillis(nowNanos - lastCheckNanos) >= CHECK_FREQ) {
+                if (CommonUtils.nanosToMillis(nowNanos - lastCheckNanos) >= 
CHECK_FREQ) {
                     int halfSize = data.length >> 1;
 
                     if (this.maxMsgSize < halfSize)
@@ -212,12 +212,12 @@ abstract class BinaryMemoryAllocator {
                 cntr = cntr == Integer.MAX_VALUE ? 0 : cntr + 1;
 
                 long now = System.nanoTime();
-                if (U.nanosToMillis(now - lastCheckNanos) >= CHECK_FREQ && 
cntr > history.length) {
+                if (CommonUtils.nanosToMillis(now - lastCheckNanos) >= 
CHECK_FREQ && cntr > history.length) {
                     lastCheckNanos = now;
 
                     int[] tmp = Arrays.copyOf(history, history.length);
                     Arrays.sort(tmp);
-                    int adjusted = U.nextPowerOf2(tmp[tmp.length / 2]);
+                    int adjusted = CommonUtils.nextPowerOf2(tmp[tmp.length / 
2]);
 
                     if (adjusted < data.length)
                         data = new byte[adjusted];
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapInputStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapInputStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapInputStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapInputStream.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
diff --git 
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreamsFactoryImpl.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreamsFactoryImpl.java
new file mode 100644
index 00000000000..40f0b9f1113
--- /dev/null
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/streams/BinaryStreamsFactoryImpl.java
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.binary.streams;
+
+import java.nio.ByteBuffer;
+import org.apache.ignite.internal.util.CommonUtils;
+
+/**
+ * Binary streams factory implementation.
+ * @see CommonUtils#loadService(Class)
+ */
+public class BinaryStreamsFactoryImpl implements BinaryStreamsFactory {
+    /** {@inheritDoc} */
+    @Override public BinaryInputStream inputStream(byte[] data, int pos) {
+        return BinaryHeapInputStream.create(data, pos);
+    }
+
+    /** {@inheritDoc} */
+    @Override public BinaryInputStream inputStream(byte[] data) {
+        return new BinaryHeapInputStream(data);
+    }
+
+    /** {@inheritDoc} */
+    @Override public BinaryInputStream inputStream(ByteBuffer buf) {
+        return new BinaryByteBufferInputStream(buf);
+    }
+
+    /** {@inheritDoc} */
+    @Override public BinaryInputStream inputStream(long ptr, int cap) {
+        return new BinaryOffheapInputStream(ptr, cap);
+    }
+
+    /** {@inheritDoc} */
+    @Override public BinaryInputStream inputStream(long ptr, int cap, boolean 
forceHeap) {
+        return new BinaryOffheapInputStream(ptr, cap, forceHeap);
+    }
+
+    /** {@inheritDoc} */
+    @Override public BinaryOutputStream createPooledOutputStream(int cap, 
boolean disableAutoClose) {
+        return new BinaryHeapOutputStream(cap, 
BinaryMemoryAllocator.POOLED.chunk(), disableAutoClose);
+    }
+
+    /** {@inheritDoc} */
+    @Override public BinaryOutputStream outputStream(int cap) {
+        return new BinaryHeapOutputStream(cap);
+    }
+
+    /** {@inheritDoc} */
+    @Override public BinaryOutputStream outputStream(int cap, 
BinaryMemoryAllocatorChunk chunk) {
+        return new BinaryHeapOutputStream(cap, chunk);
+    }
+
+    /** {@inheritDoc} */
+    @Override public BinaryMemoryAllocatorChunk threadLocalChunk() {
+        return BinaryMemoryAllocator.THREAD_LOCAL.chunk();
+    }
+}
diff --git 
a/modules/binary/impl/src/main/resources/META-INF/services/org.apache.ignite.internal.binary.streams.BinaryStreamsFactory
 
b/modules/binary/impl/src/main/resources/META-INF/services/org.apache.ignite.internal.binary.streams.BinaryStreamsFactory
new file mode 100644
index 00000000000..0862373ed81
--- /dev/null
+++ 
b/modules/binary/impl/src/main/resources/META-INF/services/org.apache.ignite.internal.binary.streams.BinaryStreamsFactory
@@ -0,0 +1 @@
+org.apache.ignite.internal.binary.streams.BinaryStreamsFactoryImpl
\ No newline at end of file
diff --git a/modules/bom/pom.xml b/modules/bom/pom.xml
index bd67b5d4332..db4ee73a175 100644
--- a/modules/bom/pom.xml
+++ b/modules/bom/pom.xml
@@ -171,6 +171,11 @@
                 <artifactId>ignite-binary-api</artifactId>
                 <version>${revision}</version>
             </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>ignite-binary-impl</artifactId>
+                <version>${revision}</version>
+            </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
                 <artifactId>ignite-commons</artifactId>
diff --git 
a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
 
b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
index 08db4e746c0..b0957c244c5 100644
--- 
a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
@@ -19,6 +19,8 @@ package org.apache.ignite;
 
 import org.jetbrains.annotations.Nullable;
 
+import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
+import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
 import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MEMORY_PER_BYTE_COPY_THRESHOLD;
 import static 
org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_COLLECTION_LIMIT;
 import static 
org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_INCLUDE_SENSITIVE;
@@ -68,6 +70,21 @@ public class IgniteCommonsSystemProperties {
         "meaning that unaligned access will be performed only on x86 
architecture")
     public static final String IGNITE_MEMORY_UNALIGNED_ACCESS = 
"IGNITE_MEMORY_UNALIGNED_ACCESS";
 
+    /**
+     * System property to specify how often in milliseconds marshal buffers
+     * should be rechecked and potentially trimmed. Default value is {@code 
10,000ms}.
+     */
+    @SystemProperty(value = "How often in milliseconds marshal buffers should 
be rechecked and potentially trimmed",
+        type = Long.class, defaults = "" + DFLT_MARSHAL_BUFFERS_RECHECK)
+    public static final String IGNITE_MARSHAL_BUFFERS_RECHECK = 
"IGNITE_MARSHAL_BUFFERS_RECHECK";
+
+    /**
+     * System property to specify per thread binary allocator chunk pool size. 
Default value is {@code 32}.
+     */
+    @SystemProperty(value = "Per thread binary allocator chunk pool size",
+        type = Integer.class, defaults = "" + 
DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE)
+    public static final String IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE = 
"IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE";
+
     /**
      * @param enumCls Enum type.
      * @param name Name of the system property or environment variable.
diff --git 
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
index e491a0f4e82..3eef1ac12d2 100644
--- 
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
@@ -20,9 +20,14 @@ package org.apache.ignite.internal.util;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ServiceLoader;
+import java.util.concurrent.TimeUnit;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteCommonsSystemProperties;
 import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.A;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -41,6 +46,12 @@ public abstract class CommonUtils {
     /** @see 
IgniteCommonsSystemProperties#IGNITE_MEMORY_PER_BYTE_COPY_THRESHOLD */
     public static final long DFLT_MEMORY_PER_BYTE_COPY_THRESHOLD = 0L;
 
+    /** @see IgniteCommonsSystemProperties#IGNITE_MARSHAL_BUFFERS_RECHECK */
+    public static final int DFLT_MARSHAL_BUFFERS_RECHECK = 10000;
+
+    /** @see 
IgniteCommonsSystemProperties#IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE */
+    public static final int DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE = 32;
+
     /** Sun-specific JDK constructor factory for objects that don't have empty 
constructor. */
     private static final Method CTOR_FACTORY;
 
@@ -244,4 +255,83 @@ public abstract class CommonUtils {
 
         return (int)y;
     }
+
+    /**
+     * @param svcCls Service class to load.
+     * @param <S> Type of loaded interfaces.
+     * @return Lazy iterable structure over loaded class implementations.
+     */
+    public static <S> Iterable<S> loadService(Class<S> svcCls) {
+        return AccessController.doPrivileged(new 
PrivilegedAction<Iterable<S>>() {
+            @Override public Iterable<S> run() {
+                return ServiceLoader.load(svcCls);
+            }
+        });
+    }
+
+    /**
+     * Convert milliseconds time interval to nanoseconds.
+     *
+     * @param millis Original time interval.
+     * @return Calculated time interval.
+     */
+    public static long millisToNanos(long millis) {
+        return TimeUnit.MILLISECONDS.toNanos(millis);
+    }
+
+    /**
+     * Convert nanoseconds time interval to milliseconds.
+     *
+     * @param nanos Original time interval.
+     * @return Calculated time interval.
+     */
+    public static long nanosToMillis(long nanos) {
+        return TimeUnit.NANOSECONDS.toMillis(nanos);
+    }
+
+    /**
+     * Returns number of milliseconds passed after the given nanos timestamp.
+     *
+     * @param nanos Nanos timestamp.
+     * @return Number of milliseconds passed after the given nanos timestamp.
+     * @see System#nanoTime()
+     */
+    public static long millisSinceNanos(long nanos) {
+        return nanosToMillis(System.nanoTime() - nanos);
+    }
+
+    /**
+     * Gets nearest power of 2 larger or equal than v.
+     *
+     * @param v Value.
+     * @return Nearest power of 2.
+     */
+    public static int ceilPow2(int v) {
+        int i = v - 1;
+
+        return Integer.highestOneBit(i) << 1 - (i >>> 30 ^ v >> 31);
+    }
+
+    /**
+     * @param i Value.
+     * @return {@code true} If the given value is power of 2 (0 is not power 
of 2).
+     */
+    public static boolean isPow2(int i) {
+        return i > 0 && (i & (i - 1)) == 0;
+    }
+
+    /**
+     * Round up the argument to the next highest power of 2;
+     *
+     * @param v Value to round up.
+     * @return Next closest power of 2.
+     */
+    public static int nextPowerOf2(int v) {
+        A.ensure(v >= 0, "v must not be negative");
+
+        if (v == 0)
+            return 1;
+
+        return 1 << (32 - Integer.numberOfLeadingZeros(v - 1));
+    }
 }
diff --git a/modules/core/pom.xml b/modules/core/pom.xml
index 4d6fd825bb2..f2f5bb93336 100644
--- a/modules/core/pom.xml
+++ b/modules/core/pom.xml
@@ -68,6 +68,12 @@
             <scope>compile</scope>
         </dependency>
 
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ignite-binary-impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>ignite-codegen2</artifactId>
@@ -345,6 +351,7 @@
                                 <includes>
                                     
<include>org.apache.ignite:ignite-commons</include>
                                     
<include>org.apache.ignite:ignite-binary-api</include>
+                                    
<include>org.apache.ignite:ignite-binary-impl</include>
                                     
<include>org.apache.ignite:ignite-grid-unsafe</include>
                                 </includes>
                             </artifactSet>
diff --git 
a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java 
b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index 35b0d06165f..c513375495b 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -59,8 +59,6 @@ import static 
org.apache.ignite.internal.LongJVMPauseDetector.DEFAULT_JVM_PAUSE_
 import static 
org.apache.ignite.internal.LongJVMPauseDetector.DFLT_JVM_PAUSE_DETECTOR_LAST_EVENTS_COUNT;
 import static 
org.apache.ignite.internal.LongJVMPauseDetector.DFLT_JVM_PAUSE_DETECTOR_PRECISION;
 import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_IGNITE_USE_BINARY_ARRAYS;
-import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
-import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
 import static 
org.apache.ignite.internal.cache.query.index.sorted.inline.InlineRecommender.DFLT_THROTTLE_INLINE_SIZE_CALCULATION;
 import static 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.DFLT_DISCOVERY_HISTORY_SIZE;
 import static 
org.apache.ignite.internal.processors.affinity.AffinityAssignment.DFLT_AFFINITY_BACKUPS_THRESHOLD;
@@ -501,21 +499,6 @@ public final class IgniteSystemProperties extends 
IgniteCommonsSystemProperties
         defaults = "" + DFLT_PRELOAD_RESEND_TIMEOUT)
     public static final String IGNITE_PRELOAD_RESEND_TIMEOUT = 
"IGNITE_PRELOAD_RESEND_TIMEOUT";
 
-    /**
-     * System property to specify how often in milliseconds marshal buffers
-     * should be rechecked and potentially trimmed. Default value is {@code 
10,000ms}.
-     */
-    @SystemProperty(value = "How often in milliseconds marshal buffers should 
be rechecked and potentially trimmed",
-        type = Long.class, defaults = "" + DFLT_MARSHAL_BUFFERS_RECHECK)
-    public static final String IGNITE_MARSHAL_BUFFERS_RECHECK = 
"IGNITE_MARSHAL_BUFFERS_RECHECK";
-
-    /**
-     * System property to specify per thread binary allocator chunk pool size. 
Default value is {@code 32}.
-     */
-    @SystemProperty(value = "Per thread binary allocator chunk pool size",
-        type = Integer.class, defaults = "" + 
DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE)
-    public static final String IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE = 
"IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE";
-
     /**
      * System property to disable {@link HostnameVerifier} for SSL connections.
      * Can be used for development with self-signed certificates. Default 
value is {@code false}.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index 7fff65e3721..cedac3b1a24 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -100,12 +100,6 @@ import static 
org.apache.ignite.internal.util.GridUnsafe.align;
  * Binary utils.
  */
 public class BinaryUtils {
-    /** @see IgniteSystemProperties#IGNITE_MARSHAL_BUFFERS_RECHECK */
-    public static final int DFLT_MARSHAL_BUFFERS_RECHECK = 10000;
-
-    /** @see 
IgniteSystemProperties#IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE */
-    public static final int DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE = 32;
-
     /**
      * Actual file name "{type_id}.classname{platform_id}".
      * Where {@code type_id} is integer type id and {@code platform_id} is 
byte from {@link PlatformType}
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java 
b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index f21b0dc2cc9..4f86eb8023f 100755
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -79,8 +79,6 @@ import java.nio.charset.Charset;
 import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.security.ProtectionDomain;
 import java.sql.Connection;
 import java.sql.SQLException;
@@ -106,7 +104,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Properties;
 import java.util.Random;
-import java.util.ServiceLoader;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.UUID;
@@ -868,19 +865,6 @@ public abstract class IgniteUtils extends CommonUtils {
                 Collections.emptyList();
     }
 
-    /**
-     * @param svcCls Service class to load.
-     * @param <S> Type of loaded interfaces.
-     * @return Lazy iterable structure over loaded class implementations.
-     */
-    public static <S> Iterable<S> loadService(Class<S> svcCls) {
-        return AccessController.doPrivileged(new 
PrivilegedAction<Iterable<S>>() {
-            @Override public Iterable<S> run() {
-                return ServiceLoader.load(svcCls);
-            }
-        });
-    }
-
     /**
      * Converts exception, but unlike {@link 
#convertException(IgniteCheckedException)}
      * does not wrap passed in exception if none suitable converter found.
@@ -940,57 +924,6 @@ public abstract class IgniteUtils extends CommonUtils {
         return curTimeMillis;
     }
 
-    /**
-     * Convert milliseconds time interval to nanoseconds.
-     *
-     * @param millis Original time interval.
-     * @return Calculated time interval.
-     */
-    public static long millisToNanos(long millis) {
-        return TimeUnit.MILLISECONDS.toNanos(millis);
-    }
-
-    /**
-     * Convert nanoseconds time interval to milliseconds.
-     *
-     * @param nanos Original time interval.
-     * @return Calculated time interval.
-     */
-    public static long nanosToMillis(long nanos) {
-        return TimeUnit.NANOSECONDS.toMillis(nanos);
-    }
-
-    /**
-     * Returns number of milliseconds passed after the given nanos timestamp.
-     *
-     * @param nanos Nanos timestamp.
-     * @return Number of milliseconds passed after the given nanos timestamp.
-     * @see System#nanoTime()
-     */
-    public static long millisSinceNanos(long nanos) {
-        return nanosToMillis(System.nanoTime() - nanos);
-    }
-
-    /**
-     * Gets nearest power of 2 larger or equal than v.
-     *
-     * @param v Value.
-     * @return Nearest power of 2.
-     */
-    public static int ceilPow2(int v) {
-        int i = v - 1;
-
-        return Integer.highestOneBit(i) << 1 - (i >>> 30 ^ v >> 31);
-    }
-
-    /**
-     * @param i Value.
-     * @return {@code true} If the given value is power of 2 (0 is not power 
of 2).
-     */
-    public static boolean isPow2(int i) {
-        return i > 0 && (i & (i - 1)) == 0;
-    }
-
     /**
      * Gets name for given grid event type.
      *
@@ -7022,21 +6955,6 @@ public abstract class IgniteUtils extends CommonUtils {
         }
     }
 
-    /**
-     * Round up the argument to the next highest power of 2;
-     *
-     * @param v Value to round up.
-     * @return Next closest power of 2.
-     */
-    public static int nextPowerOf2(int v) {
-        A.ensure(v >= 0, "v must not be negative");
-
-        if (v == 0)
-            return 1;
-
-        return 1 << (32 - Integer.numberOfLeadingZeros(v - 1));
-    }
-
     /**
      * Gets absolute value for integer. If integer is {@link 
Integer#MIN_VALUE}, then {@code 0} is returned.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
index 19a71e486bf..08666e0fa63 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
@@ -28,7 +28,7 @@ import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.apache.ignite.internal.util.typedef.internal.U;
 
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK;
-import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
+import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
 import static org.apache.ignite.internal.util.GridUnsafe.BIG_ENDIAN;
 import static org.apache.ignite.internal.util.GridUnsafe.BYTE_ARR_OFF;
 import static org.apache.ignite.internal.util.GridUnsafe.CHAR_ARR_OFF;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
index 7314a71bbef..f2331d84a09 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
@@ -25,7 +25,7 @@ import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK;
-import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
+import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
 import static org.apache.ignite.internal.util.CommonUtils.MAX_ARRAY_SIZE;
 import static org.apache.ignite.internal.util.GridUnsafe.BIG_ENDIAN;
 import static org.apache.ignite.internal.util.GridUnsafe.BYTE_ARR_OFF;
diff --git a/pom.xml b/pom.xml
index 3d3fc9c4b94..d1cf7cd2cb4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,7 @@
         <module>modules/tools</module>
         <module>modules/commons</module>
         <module>modules/binary/api</module>
+        <module>modules/binary/impl</module>
         <module>modules/unsafe</module>
         <module>modules/core</module>
         <module>modules/compress</module>


Reply via email to