http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoadResponse.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoadResponse.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoadResponse.java
index 835e3bd..c926382 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoadResponse.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoadResponse.java
@@ -33,7 +33,7 @@ public class GridDataLoadResponse implements Message {
     private long reqId;
 
     /** */
-    private byte[] errBytes;
+    private ByteBuffer errBytes;
 
     /** */
     private boolean forceLocDep;
@@ -43,7 +43,7 @@ public class GridDataLoadResponse implements Message {
      * @param errBytes Error bytes.
      * @param forceLocDep Force local deployment.
      */
-    public GridDataLoadResponse(long reqId, byte[] errBytes, boolean 
forceLocDep) {
+    public GridDataLoadResponse(long reqId, ByteBuffer errBytes, boolean 
forceLocDep) {
         this.reqId = reqId;
         this.errBytes = errBytes;
         this.forceLocDep = forceLocDep;
@@ -66,7 +66,7 @@ public class GridDataLoadResponse implements Message {
     /**
      * @return Error bytes.
      */
-    public byte[] errorBytes() {
+    public ByteBuffer errorBytes() {
         return errBytes;
     }
 
@@ -95,8 +95,8 @@ public class GridDataLoadResponse implements Message {
 
         switch (writer.state()) {
             case 0:
-                if (!writer.writeByteArray("errBytes", errBytes))
-                    return false;
+//                if (!writer.writeByteArray("errBytes", errBytes))
+//                    return false;
 
                 writer.incrementState();
 
@@ -126,7 +126,7 @@ public class GridDataLoadResponse implements Message {
 
         switch (reader.state()) {
             case 0:
-                errBytes = reader.readByteArray("errBytes");
+//                errBytes = reader.readByteArray("errBytes");
 
                 if (!reader.isLastRead())
                     return false;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoaderProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoaderProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoaderProcessor.java
index 38d6765..642685d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoaderProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/GridDataLoaderProcessor.java
@@ -30,6 +30,7 @@ import org.apache.ignite.marshaller.*;
 import org.apache.ignite.thread.*;
 import org.jetbrains.annotations.*;
 
+import java.nio.*;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -274,7 +275,7 @@ public class GridDataLoaderProcessor<K, V> extends 
GridProcessorAdapter {
      */
     private void sendResponse(UUID nodeId, Object resTopic, long reqId, 
@Nullable Throwable err,
         boolean forceLocDep) {
-        byte[] errBytes;
+        ByteBuffer errBytes;
 
         try {
             errBytes = err != null ? marsh.marshal(err) : null;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/IgniteDataLoaderImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/IgniteDataLoaderImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/IgniteDataLoaderImpl.java
index 12d3e35..c233f27 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/IgniteDataLoaderImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/dataload/IgniteDataLoaderImpl.java
@@ -41,6 +41,7 @@ import org.apache.ignite.lang.*;
 import org.jdk8.backport.*;
 import org.jetbrains.annotations.*;
 
+import java.nio.*;
 import java.util.*;
 import java.util.Map.*;
 import java.util.concurrent.*;
@@ -62,7 +63,7 @@ public class IgniteDataLoaderImpl<K, V> implements 
IgniteDataLoader<K, V>, Delay
     private Updater<K, V> updater = ISOLATED_UPDATER;
 
     /** */
-    private byte[] updaterBytes;
+    private ByteBuffer updaterBytes;
 
     /** Max remap count before issuing an error. */
     private static final int DFLT_MAX_REMAP_CNT = 32;
@@ -107,7 +108,7 @@ public class IgniteDataLoaderImpl<K, V> implements 
IgniteDataLoader<K, V>, Delay
     private final Object topic;
 
     /** */
-    private byte[] topicBytes;
+    private ByteBuffer topicBytes;
 
     /** {@code True} if data loader has been cancelled. */
     private volatile boolean cancelled;
@@ -1208,7 +1209,7 @@ public class IgniteDataLoaderImpl<K, V> implements 
IgniteDataLoader<K, V>, Delay
 
             Throwable err = null;
 
-            byte[] errBytes = res.errorBytes();
+            ByteBuffer errBytes = res.errorBytes();
 
             if (errBytes != null) {
                 try {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAckMessage.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAckMessage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAckMessage.java
index f52c6de..ffe00e8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAckMessage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAckMessage.java
@@ -45,7 +45,7 @@ public class IgfsAckMessage extends IgfsCommunicationMessage {
     private IgniteCheckedException err;
 
     /** */
-    private byte[] errBytes;
+    private ByteBuffer errBytes;
 
     /**
      * Empty constructor required by {@link Externalizable}.
@@ -118,8 +118,8 @@ public class IgfsAckMessage extends 
IgfsCommunicationMessage {
 
         switch (writer.state()) {
             case 0:
-                if (!writer.writeByteArray("errBytes", errBytes))
-                    return false;
+//                if (!writer.writeByteArray("errBytes", errBytes))
+//                    return false;
 
                 writer.incrementState();
 
@@ -152,7 +152,7 @@ public class IgfsAckMessage extends 
IgfsCommunicationMessage {
 
         switch (reader.state()) {
             case 0:
-                errBytes = reader.readByteArray("errBytes");
+//                errBytes = reader.readByteArray("errBytes");
 
                 if (!reader.isLastRead())
                     return false;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDeleteMessage.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDeleteMessage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDeleteMessage.java
index 2196525..a000509 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDeleteMessage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDeleteMessage.java
@@ -43,7 +43,7 @@ public class IgfsDeleteMessage extends 
IgfsCommunicationMessage {
     private IgniteCheckedException err;
 
     /** */
-    private byte[] errBytes;
+    private ByteBuffer errBytes;
 
     /**
      * {@link Externalizable} support.
@@ -122,8 +122,8 @@ public class IgfsDeleteMessage extends 
IgfsCommunicationMessage {
 
         switch (writer.state()) {
             case 0:
-                if (!writer.writeByteArray("errBytes", errBytes))
-                    return false;
+//                if (!writer.writeByteArray("errBytes", errBytes))
+//                    return false;
 
                 writer.incrementState();
 
@@ -150,7 +150,7 @@ public class IgfsDeleteMessage extends 
IgfsCommunicationMessage {
 
         switch (reader.state()) {
             case 0:
-                errBytes = reader.readByteArray("errBytes");
+//                errBytes = reader.readByteArray("errBytes");
 
                 if (!reader.isLastRead())
                     return false;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobWorker.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobWorker.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobWorker.java
index fdfc5c8..8cf96e8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobWorker.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobWorker.java
@@ -33,6 +33,7 @@ import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.*;
 import org.jetbrains.annotations.*;
 
+import java.nio.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
@@ -74,7 +75,7 @@ public class GridJobWorker extends GridWorker implements 
GridTimeoutObject {
     private final Object taskTopic;
 
     /** */
-    private byte[] jobBytes;
+    private ByteBuffer jobBytes;
 
     /** Task originating node. */
     private final ClusterNode taskNode;
@@ -146,7 +147,7 @@ public class GridJobWorker extends GridWorker implements 
GridTimeoutObject {
         long createTime,
         GridJobSessionImpl ses,
         GridJobContextImpl jobCtx,
-        byte[] jobBytes,
+        ByteBuffer jobBytes,
         ComputeJob job,
         ClusterNode taskNode,
         boolean internal,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java
index 7118269..4d1d84d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java
@@ -30,6 +30,7 @@ import org.apache.ignite.marshaller.*;
 import org.jdk8.backport.*;
 import org.jetbrains.annotations.*;
 
+import java.nio.*;
 import java.util.*;
 
 /**
@@ -104,7 +105,7 @@ public class GridOffHeapProcessor extends 
GridProcessorAdapter {
     private byte[] keyBytes(Object key, @Nullable byte[] keyBytes) throws 
IgniteCheckedException {
         assert key != null;
 
-        return keyBytes != null ? keyBytes : marsh.marshal(key);
+        return keyBytes != null ? keyBytes : U.toArray(marsh.marshal(key));
     }
 
     /**
@@ -208,7 +209,8 @@ public class GridOffHeapProcessor extends 
GridProcessorAdapter {
         if (valBytes == null)
             return null;
 
-        return marsh.unmarshal(valBytes, ldr == null ? U.gridClassLoader() : 
ldr);
+        // TODO: IGNITE-471 - Migrate to buffers.
+        return marsh.unmarshal(ByteBuffer.wrap(valBytes), ldr == null ? 
U.gridClassLoader() : ldr);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index 786cde7..e33e2a5 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -255,16 +255,14 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
      *
      * @param space Space.
      * @param key Key.
-     * @param keyBytes Byte array with key data.
      * @param val Value.
-     * @param valBytes Byte array with value data.
      * @param ver Cache entry version.
      * @param expirationTime Expiration time or 0 if never expires.
      * @throws IgniteCheckedException In case of error.
      */
     @SuppressWarnings("unchecked")
-    public <K, V> void store(final String space, final K key, @Nullable byte[] 
keyBytes, final V val,
-        @Nullable byte[] valBytes, byte[] ver, long expirationTime) throws 
IgniteCheckedException {
+    public <K, V> void store(final String space, final K key, final V val, 
byte[] ver, long expirationTime)
+        throws IgniteCheckedException {
         assert key != null;
         assert val != null;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskCommandHandler.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskCommandHandler.java
index e42ae58..e24c2be 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskCommandHandler.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskCommandHandler.java
@@ -38,6 +38,7 @@ import org.apache.ignite.resources.*;
 import org.jetbrains.annotations.*;
 
 import java.io.*;
+import java.nio.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
@@ -460,7 +461,7 @@ public class GridTaskCommandHandler extends 
GridRestCommandHandlerAdapter {
 
             // 2. Send message.
             try {
-                byte[] topicBytes = 
ctx.config().getMarshaller().marshal(topic);
+                ByteBuffer topicBytes = 
ctx.config().getMarshaller().marshal(topic);
 
                 ctx.io().send(taskNode, TOPIC_REST, new 
GridTaskResultRequest(taskId, topic, topicBytes), SYSTEM_POOL);
             }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultRequest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultRequest.java
index 3802222..1418b1a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultRequest.java
@@ -39,7 +39,7 @@ public class GridTaskResultRequest implements Message {
     private Object topic;
 
     /** Serialized topic. */
-    private byte[] topicBytes;
+    private ByteBuffer topicBytes;
 
     /**
      * Public no-arg constructor for {@link Externalizable} support.
@@ -53,7 +53,7 @@ public class GridTaskResultRequest implements Message {
      * @param topic Topic.
      * @param topicBytes Serialized topic.
      */
-    GridTaskResultRequest(IgniteUuid taskId, Object topic, byte[] topicBytes) {
+    GridTaskResultRequest(IgniteUuid taskId, Object topic, ByteBuffer 
topicBytes) {
         this.taskId = taskId;
         this.topic = topic;
         this.topicBytes = topicBytes;
@@ -85,7 +85,7 @@ public class GridTaskResultRequest implements Message {
     /**
      * @return Serialized topic.
      */
-    public byte[] topicBytes() {
+    public ByteBuffer topicBytes() {
         return topicBytes;
     }
 
@@ -117,8 +117,8 @@ public class GridTaskResultRequest implements Message {
                 writer.incrementState();
 
             case 1:
-                if (!writer.writeByteArray("topicBytes", topicBytes))
-                    return false;
+//                if (!writer.writeByteArray("topicBytes", topicBytes))
+//                    return false;
 
                 writer.incrementState();
 
@@ -144,7 +144,7 @@ public class GridTaskResultRequest implements Message {
                 reader.incrementState();
 
             case 1:
-                topicBytes = reader.readByteArray("topicBytes");
+//                topicBytes = reader.readByteArray("topicBytes");
 
                 if (!reader.isLastRead())
                     return false;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultResponse.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultResponse.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultResponse.java
index 66421a1..7c8fdc0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultResponse.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultResponse.java
@@ -35,7 +35,7 @@ public class GridTaskResultResponse implements Message {
     private Object res;
 
     /** Serialized result. */
-    private byte[] resBytes;
+    private ByteBuffer resBytes;
 
     /** Finished flag. */
     private boolean finished;
@@ -63,14 +63,14 @@ public class GridTaskResultResponse implements Message {
     /**
      * @param resBytes Serialized result.
      */
-    public void resultBytes(byte[] resBytes) {
+    public void resultBytes(ByteBuffer resBytes) {
         this.resBytes = resBytes;
     }
 
     /**
      * @return Serialized result.
      */
-    public byte[] resultBytes() {
+    public ByteBuffer resultBytes() {
         return resBytes;
     }
 
@@ -147,8 +147,8 @@ public class GridTaskResultResponse implements Message {
                 writer.incrementState();
 
             case 3:
-                if (!writer.writeByteArray("resBytes", resBytes))
-                    return false;
+//                if (!writer.writeByteArray("resBytes", resBytes))
+//                    return false;
 
                 writer.incrementState();
 
@@ -190,7 +190,7 @@ public class GridTaskResultResponse implements Message {
                 reader.incrementState();
 
             case 3:
-                resBytes = reader.readByteArray("resBytes");
+//                resBytes = reader.readByteArray("resBytes");
 
                 if (!reader.isLastRead())
                     return false;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java
index c7f8c70..73d5c9a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java
@@ -692,7 +692,7 @@ public class GridTcpRestParser implements GridNioParser {
         assert bytes != null;
 
         if ((flags & SERIALIZED_FLAG) != 0)
-            return jdkMarshaller.unmarshal(bytes, null);
+            return jdkMarshaller.unmarshal(ByteBuffer.wrap(bytes), null);
 
         int masked = flags & 0xff00;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
index 54a2fd8..702b0d6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
@@ -41,6 +41,7 @@ import org.jetbrains.annotations.*;
 
 import javax.cache.*;
 import javax.cache.event.*;
+import java.nio.*;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -845,7 +846,7 @@ public class GridServiceProcessor extends 
GridProcessorAdapter {
         Marshaller m = ctx.config().getMarshaller();
 
         try {
-            byte[] bytes = m.marshal(svc);
+            ByteBuffer bytes = m.marshal(svc);
 
             Service cp = m.unmarshal(bytes, svc.getClass().getClassLoader());
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionRequest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionRequest.java
index fc86c3b..2e09ca8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionRequest.java
@@ -40,7 +40,7 @@ public class GridStreamerExecutionRequest implements Message {
 
     /** Serialized batch in case if P2P class loading is enabled. */
     @GridToStringExclude
-    private byte[] batchBytes;
+    private ByteBuffer batchBytes;
 
     /** Deployment mode. */
     private DeploymentMode depMode;
@@ -77,7 +77,7 @@ public class GridStreamerExecutionRequest implements Message {
      */
     public GridStreamerExecutionRequest(
         boolean forceLocDep,
-        byte[] batchBytes,
+        ByteBuffer batchBytes,
         @Nullable DeploymentMode depMode,
         @Nullable String sampleClsName,
         @Nullable String userVer,
@@ -140,7 +140,7 @@ public class GridStreamerExecutionRequest implements 
Message {
     /**
      * @return Serialized batch in case if P2P class loading is enabled.
      */
-    public byte[] batchBytes() {
+    public ByteBuffer batchBytes() {
         return batchBytes;
     }
 
@@ -162,8 +162,8 @@ public class GridStreamerExecutionRequest implements 
Message {
 
         switch (writer.state()) {
             case 0:
-                if (!writer.writeByteArray("batchBytes", batchBytes))
-                    return false;
+//                if (!writer.writeByteArray("batchBytes", batchBytes))
+//                    return false;
 
                 writer.incrementState();
 
@@ -217,7 +217,7 @@ public class GridStreamerExecutionRequest implements 
Message {
 
         switch (reader.state()) {
             case 0:
-                batchBytes = reader.readByteArray("batchBytes");
+//                batchBytes = reader.readByteArray("batchBytes");
 
                 if (!reader.isLastRead())
                     return false;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerResponse.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerResponse.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerResponse.java
index 36f8822..fdaa002 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerResponse.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerResponse.java
@@ -35,7 +35,7 @@ public class GridStreamerResponse implements Message {
     private IgniteUuid futId;
 
     /** */
-    private byte[] errBytes;
+    private ByteBuffer errBytes;
 
     /**
      *
@@ -48,7 +48,7 @@ public class GridStreamerResponse implements Message {
      * @param futId Future ID.
      * @param errBytes Serialized error, if any.
      */
-    public GridStreamerResponse(IgniteUuid futId, @Nullable byte[] errBytes) {
+    public GridStreamerResponse(IgniteUuid futId, @Nullable ByteBuffer 
errBytes) {
         assert futId != null;
 
         this.futId = futId;
@@ -65,7 +65,7 @@ public class GridStreamerResponse implements Message {
     /**
      * @return Serialized error.
      */
-    public byte[] errorBytes() {
+    public ByteBuffer errorBytes() {
         return errBytes;
     }
 
@@ -87,8 +87,8 @@ public class GridStreamerResponse implements Message {
 
         switch (writer.state()) {
             case 0:
-                if (!writer.writeByteArray("errBytes", errBytes))
-                    return false;
+//                if (!writer.writeByteArray("errBytes", errBytes))
+//                    return false;
 
                 writer.incrementState();
 
@@ -112,7 +112,7 @@ public class GridStreamerResponse implements Message {
 
         switch (reader.state()) {
             case 0:
-                errBytes = reader.readByteArray("errBytes");
+//                errBytes = reader.readByteArray("errBytes");
 
                 if (!reader.isLastRead())
                     return false;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/IgniteStreamerImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/IgniteStreamerImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/IgniteStreamerImpl.java
index 98c758b..af725f2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/IgniteStreamerImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/IgniteStreamerImpl.java
@@ -40,6 +40,7 @@ import org.jdk8.backport.*;
 import org.jetbrains.annotations.*;
 
 import java.io.*;
+import java.nio.*;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -786,7 +787,7 @@ public class IgniteStreamerImpl implements 
IgniteStreamerEx, Externalizable {
                         log.debug("Sending completion response to remote node 
[nodeId=" + dstNodeId +
                             ", futId=" + futId + ", err=" + err + ']');
 
-                    byte[] errBytes = err != null ? 
ctx.config().getMarshaller().marshal(err) : null;
+                    ByteBuffer errBytes = err != null ? 
ctx.config().getMarshaller().marshal(err) : null;
 
                     sendWithRetries(dstNodeId, new GridStreamerResponse(futId, 
errBytes));
                 }
@@ -1018,7 +1019,7 @@ public class IgniteStreamerImpl implements 
IgniteStreamerEx, Externalizable {
         throws IgniteCheckedException {
         boolean depEnabled = ctx.deploy().enabled();
 
-        byte[] batchBytes = ctx.config().getMarshaller().marshal(batch);
+        ByteBuffer batchBytes = ctx.config().getMarshaller().marshal(batch);
 
         if (!depEnabled)
             return new GridStreamerExecutionRequest(true, batchBytes, null, 
null, null, null, null);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/util/GridByteArrayList.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridByteArrayList.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/GridByteArrayList.java
index de5dd47..8b66770 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridByteArrayList.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/GridByteArrayList.java
@@ -385,7 +385,7 @@ public class GridByteArrayList implements Message, 
Externalizable {
     public InputStream inputStream() {
         GridUnsafeDataInput in = new GridUnsafeDataInput();
 
-        in.bytes(data, size);
+        in.bytes(data, 0, size);
 
         return in;
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
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 cf21d46..b074512 100644
--- 
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
@@ -1967,6 +1967,42 @@ public abstract class IgniteUtils {
     }
 
     /**
+     * @param out Output stream.
+     * @param buf Byte buffer.
+     * @throws IOException In case of error.
+     */
+    public static void writeByteBuffer(DataOutput out, @Nullable ByteBuffer 
buf) throws IOException {
+        if (buf == null)
+            out.writeInt(-1);
+        else {
+            // TODO: IGNITE-471 - Support offheap?
+            assert buf.hasArray();
+
+            out.writeInt(buf.remaining());
+            out.write(buf.array(), buf.position(), buf.remaining());
+        }
+    }
+
+    /**
+     * @param in Input stream.
+     * @return Byte buffer.
+     * @throws IOException In case of error.
+     */
+    @Nullable public static ByteBuffer readByteBuffer(DataInput in) throws 
IOException {
+        int len = in.readInt();
+
+        if (len == -1)
+            return null;
+        else {
+            byte[] arr = new byte[len];
+
+            in.readFully(arr);
+
+            return ByteBuffer.wrap(arr);
+        }
+    }
+
+    /**
      * Writes byte array to output stream accounting for <tt>null</tt> values.
      *
      * @param out Output stream to write to.
@@ -9027,6 +9063,24 @@ public abstract class IgniteUtils {
     }
 
     /**
+     * // TODO: IGNITE-471 - Remove method.
+     *
+     * @param buf Byte buffer.
+     * @return Byte array.
+     */
+    public static byte[] toArray(ByteBuffer buf) {
+        if (buf.hasArray() && buf.position() == 0 && buf.remaining() == 
buf.capacity())
+            return buf.array();
+        else {
+            byte[] arr = new byte[buf.remaining()];
+
+            buf.get(arr);
+
+            return arr;
+        }
+    }
+
+    /**
      * Throws exception with uniform error message if given parameter's 
assertion condition
      * is {@code false}.
      *

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteBufferInputStream.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteBufferInputStream.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteBufferInputStream.java
new file mode 100644
index 0000000..cc8e067
--- /dev/null
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridByteBufferInputStream.java
@@ -0,0 +1,91 @@
+/*
+ * 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.util.io;
+
+import java.io.*;
+import java.nio.*;
+
+/**
+ * Input stream that reads from provided {@link ByteBuffer}.
+ */
+public class GridByteBufferInputStream extends InputStream {
+    /** */
+    private final ByteBuffer buf;
+
+    /**
+     * @param buf Byte buffer.
+     */
+    public GridByteBufferInputStream(ByteBuffer buf) {
+        this.buf = buf;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int read() throws IOException {
+        return buf.get();
+    }
+
+    /** {@inheritDoc} */
+    @Override public int read(byte[] arr) throws IOException {
+        int pos = buf.position();
+
+        buf.get(arr);
+
+        return buf.position() - pos;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int read(byte[] arr, int off, int len) throws IOException 
{
+        int pos = buf.position();
+
+        buf.get(arr, off, len);
+
+        return buf.position() - pos;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long skip(long n) throws IOException {
+        if (n <= 0)
+            return 0;
+
+        long skipped = Math.min(buf.remaining(), n);
+
+        buf.position(buf.position() + (int)skipped);
+
+        return skipped;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int available() throws IOException {
+        return buf.remaining();
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean markSupported() {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override public synchronized void mark(int readLimit) {
+        buf.mark();
+    }
+
+    /** {@inheritDoc} */
+    @Override public synchronized void reset() throws IOException {
+        buf.reset();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java
index a0c556e..b6992d0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java
@@ -25,9 +25,10 @@ import java.io.*;
 public interface GridDataInput extends DataInput {
     /**
      * @param bytes Bytes.
+     * @param off Offset.
      * @param len Length.
      */
-    public void bytes(byte[] bytes, int len);
+    public void bytes(byte[] bytes, int off, int len);
 
     /**
      * @param in Underlying input stream.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
----------------------------------------------------------------------
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 fb498d6..1c1c03e 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
@@ -101,11 +101,6 @@ public class GridUnsafeDataInput extends InputStream 
implements GridDataInput {
     /** Last length check timestamp. */
     private long lastCheck;
 
-    /** {@inheritDoc} */
-    @Override public void bytes(byte[] bytes, int len) {
-        bytes(bytes, 0, len);
-    }
-
     /**
      * @param bytes Bytes.
      * @param off Offset.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
 
b/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
index fd08a02..b703525 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
@@ -23,6 +23,9 @@ import org.apache.ignite.internal.util.io.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.jetbrains.annotations.*;
 
+import java.io.*;
+import java.nio.*;
+
 /**
  * Base class for marshallers. Provides default implementations of methods
  * that work with byte array or {@link GridByteArrayList}. These 
implementations
@@ -42,7 +45,7 @@ public abstract class AbstractMarshaller implements 
Marshaller {
     }
 
     /** {@inheritDoc} */
-    @Override public byte[] marshal(@Nullable Object obj) throws 
IgniteCheckedException {
+    @Override public ByteBuffer marshal(@Nullable Object obj) throws 
IgniteCheckedException {
         GridByteArrayOutputStream out = null;
 
         try {
@@ -50,7 +53,7 @@ public abstract class AbstractMarshaller implements 
Marshaller {
 
             marshal(obj, out);
 
-            return out.toByteArray();
+            return ByteBuffer.wrap(out.internalArray(), 0, out.size());
         }
         finally {
             U.close(out, null);
@@ -58,11 +61,11 @@ public abstract class AbstractMarshaller implements 
Marshaller {
     }
 
     /** {@inheritDoc} */
-    @Override public <T> T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) 
throws IgniteCheckedException {
-        GridByteArrayInputStream in = null;
+    @Override public <T> T unmarshal(ByteBuffer buf, @Nullable ClassLoader 
clsLdr) throws IgniteCheckedException {
+        InputStream in = null;
 
         try {
-            in = new GridByteArrayInputStream(arr, 0, arr.length);
+            in = new GridByteBufferInputStream(buf);
 
             return unmarshal(in, clsLdr);
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java 
b/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
index 528fded..d984bf8 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
@@ -21,6 +21,7 @@ import org.apache.ignite.*;
 import org.jetbrains.annotations.*;
 
 import java.io.*;
+import java.nio.*;
 
 /**
  * {@code GridMarshaller} allows to marshal or unmarshal objects in grid. It 
provides
@@ -83,13 +84,13 @@ public interface Marshaller {
     public void marshal(@Nullable Object obj, OutputStream out) throws 
IgniteCheckedException;
 
     /**
-     * Marshals object to byte array.
+     * Marshals object to bytes.
      *
      * @param obj Object to marshal.
-     * @return Byte array.
+     * @return Byte buffer.
      * @throws IgniteCheckedException If marshalling failed.
      */
-    public byte[] marshal(@Nullable Object obj) throws IgniteCheckedException;
+    public ByteBuffer marshal(@Nullable Object obj) throws 
IgniteCheckedException;
 
     /**
      * Unmarshals object from the output stream using given class loader.
@@ -104,13 +105,12 @@ public interface Marshaller {
     public <T> T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) 
throws IgniteCheckedException;
 
     /**
-     * Unmarshals object from byte array using given class loader.
+     * Unmarshals object from bytes using given class loader.
      *
-     * @param <T> Type of unmarshalled object.
-     * @param arr Byte array.
+     * @param buf Byte buffer.
      * @param clsLdr Class loader to use.
      * @return Unmarshalled object.
      * @throws IgniteCheckedException If unmarshalling failed.
      */
-    public <T> T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) throws 
IgniteCheckedException;
+    public <T> T unmarshal(ByteBuffer buf, @Nullable ClassLoader clsLdr) 
throws IgniteCheckedException;
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
 
b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
index 8ceed43..bb63fdd 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
@@ -24,6 +24,7 @@ import org.jetbrains.annotations.*;
 import sun.misc.*;
 
 import java.io.*;
+import java.nio.*;
 
 /**
  * Optimized implementation of {@link 
org.apache.ignite.marshaller.Marshaller}. Unlike {@link 
org.apache.ignite.marshaller.jdk.JdkMarshaller},
@@ -164,7 +165,7 @@ public class OptimizedMarshaller extends AbstractMarshaller 
{
     }
 
     /** {@inheritDoc} */
-    @Override public byte[] marshal(@Nullable Object obj) throws 
IgniteCheckedException {
+    @Override public ByteBuffer marshal(@Nullable Object obj) throws 
IgniteCheckedException {
         OptimizedObjectOutputStream objOut = null;
 
         try {
@@ -174,7 +175,7 @@ public class OptimizedMarshaller extends AbstractMarshaller 
{
 
             objOut.writeObject(obj);
 
-            return objOut.out().array();
+            return ByteBuffer.wrap(objOut.out().internalArray(), 0, 
objOut.out().offset());
         }
         catch (IOException e) {
             throw new IgniteCheckedException("Failed to serialize object: " + 
obj, e);
@@ -215,8 +216,9 @@ public class OptimizedMarshaller extends AbstractMarshaller 
{
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    @Override public <T> T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) 
throws IgniteCheckedException {
-        assert arr != null;
+    @Override public <T> T unmarshal(ByteBuffer buf, @Nullable ClassLoader 
clsLdr) throws IgniteCheckedException {
+        assert buf != null;
+        assert buf.hasArray(); // TODO: IGNITE-471 - Support offheap?
 
         OptimizedObjectInputStream objIn = null;
 
@@ -225,7 +227,7 @@ public class OptimizedMarshaller extends AbstractMarshaller 
{
 
             objIn.context(ctx, mapper, clsLdr != null ? clsLdr : dfltClsLdr);
 
-            objIn.in().bytes(arr, arr.length);
+            objIn.in().bytes(buf.array(), buf.position(), buf.remaining());
 
             return (T)objIn.readObject();
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index ca34f1f..1278556 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -42,6 +42,7 @@ import org.jetbrains.annotations.*;
 
 import java.io.*;
 import java.net.*;
+import java.nio.*;
 import java.text.*;
 import java.util.*;
 import java.util.concurrent.*;
@@ -1699,7 +1700,7 @@ public class TcpDiscoverySpi extends 
TcpDiscoverySpiAdapter implements TcpDiscov
             if (credBytes == null)
                 return null;
 
-            return marsh.unmarshal(credBytes, null);
+            return marsh.unmarshal(ByteBuffer.wrap(credBytes), null);
         }
         catch (IgniteCheckedException e) {
             throw new IgniteSpiException("Failed to unmarshal node security 
credentials: " + node.id(), e);
@@ -3589,7 +3590,7 @@ public class TcpDiscoverySpi extends 
TcpDiscoverySpiAdapter implements TcpDiscov
                             SecurityContext subj = 
nodeAuth.authenticateNode(node, cred);
 
                             SecurityContext coordSubj = 
ignite.configuration().getMarshaller().unmarshal(
-                                
node.<byte[]>attribute(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT),
+                                
ByteBuffer.wrap(node.<byte[]>attribute(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT)),
                                 U.gridClassLoader());
 
                             if 
(!permissionsEqual(coordSubj.subject().permissions(), 
subj.subject().permissions())) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
index 3ff4157..bdbd282 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
@@ -31,6 +31,7 @@ import org.jetbrains.annotations.*;
 
 import java.io.*;
 import java.net.*;
+import java.nio.*;
 import java.util.*;
 
 import static org.apache.ignite.IgniteSystemProperties.*;
@@ -542,14 +543,22 @@ public class TcpDiscoveryMulticastIpFinder extends 
TcpDiscoveryVmIpFinder {
         private AddressResponse(Collection<InetSocketAddress> addrs) throws 
IgniteCheckedException {
             this.addrs = addrs;
 
-            byte[] addrsData = marsh.marshal(addrs);
-            data = new byte[U.IGNITE_HEADER.length + addrsData.length];
+            ByteBuffer addrsData = marsh.marshal(addrs);
 
-            if (data.length > MAX_DATA_LENGTH)
-                throw new IgniteCheckedException("Too long data packet [size=" 
+ data.length + ", max=" + MAX_DATA_LENGTH + "]");
+            int len = U.IGNITE_HEADER.length + addrsData.remaining();
 
-            System.arraycopy(U.IGNITE_HEADER, 0, data, 0, 
U.IGNITE_HEADER.length);
-            System.arraycopy(addrsData, 0, data, 4, addrsData.length);
+            if (len > MAX_DATA_LENGTH)
+                throw new IgniteCheckedException("Too long data packet [size=" 
+ len +
+                    ", max=" + MAX_DATA_LENGTH + "]");
+
+            ByteBuffer buf = ByteBuffer.allocate(len);
+
+            buf.put(U.IGNITE_HEADER);
+            buf.put(addrsData);
+
+            assert buf.array().length == len;
+
+            data = buf.array();
         }
 
         /**
@@ -559,9 +568,9 @@ public class TcpDiscoveryMulticastIpFinder extends 
TcpDiscoveryVmIpFinder {
         private AddressResponse(byte[] data) throws IgniteCheckedException {
             assert U.bytesEqual(U.IGNITE_HEADER, 0, data, 0, 
U.IGNITE_HEADER.length);
 
-            this.data = data;
+            ByteBuffer buf = ByteBuffer.wrap(data, U.IGNITE_HEADER.length, 
data.length - U.IGNITE_HEADER.length);
 
-            addrs = marsh.unmarshal(Arrays.copyOfRange(data, 
U.IGNITE_HEADER.length, data.length), null);
+            addrs = marsh.unmarshal(buf, null);
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
index 5eec025..1d5a9b8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
@@ -559,7 +559,7 @@ public class FileSwapSpaceSpi extends IgniteSpiAdapter 
implements SwapSpaceSpi,
 
         if (keyBytes == null) {
             try {
-                keyBytes = 
ignite.configuration().getMarshaller().marshal(key.key());
+                keyBytes = 
U.toArray(ignite.configuration().getMarshaller().marshal(key.key()));
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteSpiException("Failed to marshal key: " + 
key.key(), e);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java 
b/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java
index 2dc5faa..45dc6de 100644
--- a/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java
+++ b/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java
@@ -22,6 +22,7 @@ import org.apache.ignite.marshaller.*;
 import org.jetbrains.annotations.*;
 
 import java.io.*;
+import java.nio.*;
 import java.util.*;
 
 import static junit.framework.Assert.*;
@@ -126,7 +127,7 @@ public final class GridTestIoUtils {
     public static <T> T externalize(Externalizable obj, Marshaller marshaller) 
throws Exception {
         assert marshaller != null;
 
-        byte[] buf = marshaller.marshal(obj);
+        ByteBuffer buf = marshaller.marshal(obj);
 
         // Sleep to make sure that clock advances (necessary for some tests)
         Thread.sleep(10);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java
index 87bb788..55f45c8 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java
@@ -22,6 +22,7 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.internal.processors.task.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.messaging.*;
 import org.apache.ignite.testframework.junits.common.*;
@@ -183,7 +184,7 @@ public class ClusterNodeMetricsSelfTest extends 
GridCommonAbstractTest {
 
         Object msg = new TestMessage();
 
-        int size = ignite0.configuration().getMarshaller().marshal(msg).length;
+        int size = 
U.toArray(ignite0.configuration().getMarshaller().marshal(msg)).length;
 
         assert size > MSG_SIZE;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
index fe3b1d8..597046e 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
@@ -94,9 +94,9 @@ public class GridCacheEntryMemorySizeSelfTest extends 
GridCommonAbstractTest {
                 }
             });
 
-            KEY_SIZE = marsh.marshal(1).length;
-            ONE_KB_VAL_SIZE = marsh.marshal(new Value(new byte[1024])).length;
-            TWO_KB_VAL_SIZE = marsh.marshal(new Value(new byte[2048])).length;
+            KEY_SIZE = U.toArray(marsh.marshal(1)).length;
+            ONE_KB_VAL_SIZE = U.toArray(marsh.marshal(new Value(new 
byte[1024]))).length;
+            TWO_KB_VAL_SIZE = U.toArray(marsh.marshal(new Value(new 
byte[2048]))).length;
         }
         catch (IgniteCheckedException e) {
             throw new IgniteException(e);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
index 5c975ff..8f227dc 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
@@ -23,6 +23,7 @@ import org.apache.ignite.marshaller.optimized.*;
 import org.apache.ignite.testframework.*;
 import org.apache.ignite.testframework.junits.common.*;
 
+import java.nio.*;
 import java.util.concurrent.*;
 
 /**
@@ -85,8 +86,8 @@ public class GridCacheVersionSelfTest extends 
GridCommonAbstractTest {
 
         marsh.setContext(new MarshallerContextTestImpl());
 
-        byte[] verBytes = marsh.marshal(ver);
-        byte[] verExBytes = marsh.marshal(verEx);
+        ByteBuffer verBytes = marsh.marshal(ver);
+        ByteBuffer verExBytes = marsh.marshal(verEx);
 
         GridCacheVersion verNew = marsh.unmarshal(verBytes, 
Thread.currentThread().getContextClassLoader());
         GridCacheVersionEx verExNew = marsh.unmarshal(verExBytes, 
Thread.currentThread().getContextClassLoader());

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
index e3baeb0..88a28f6 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
@@ -646,7 +646,7 @@ public class GridNioSelfTest extends GridCommonAbstractTest 
{
 
                                 MessageWithId msg = new MessageWithId();
 
-                                byte[] data = serializeMessage(msg);
+                                byte[] data = U.toArray(serializeMessage(msg));
 
                                 for (int j = 0; j < 10; j++)
                                     client.sendMessage(data, data.length);
@@ -748,7 +748,7 @@ public class GridNioSelfTest extends GridCommonAbstractTest 
{
                         while (cntr.getAndIncrement() < MSG_CNT * THREAD_CNT) {
                             MessageWithId msg = new MessageWithId();
 
-                            byte[] data = serializeMessage(msg);
+                            byte[] data = U.toArray(serializeMessage(msg));
 
                             long start = System.currentTimeMillis();
 
@@ -1120,7 +1120,7 @@ public class GridNioSelfTest extends 
GridCommonAbstractTest {
      * @return Serialized message.
      * @throws IgniteCheckedException If failed.
      */
-    private <T extends Serializable> byte[] serializeMessage(T msg) throws 
IgniteCheckedException {
+    private <T extends Serializable> ByteBuffer serializeMessage(T msg) throws 
IgniteCheckedException {
         return marsh.marshal(msg);
     }
 
@@ -1133,7 +1133,7 @@ public class GridNioSelfTest extends 
GridCommonAbstractTest {
      * @throws IgniteCheckedException If failed.
      */
     @SuppressWarnings({"RedundantTypeArguments"})
-    private <T> T deserializeMessage(byte[] data) throws 
IgniteCheckedException {
+    private <T> T deserializeMessage(ByteBuffer data) throws 
IgniteCheckedException {
         return marsh.<T>unmarshal(data, getClass().getClassLoader());
     }
 
@@ -1265,7 +1265,7 @@ public class GridNioSelfTest extends 
GridCommonAbstractTest {
             try {
                 long deliveryTime = System.currentTimeMillis();
 
-                MessageWithId msg = deserializeMessage(data);
+                MessageWithId msg = deserializeMessage(ByteBuffer.wrap(data));
 
                 Integer id = msg.getId();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java
 
b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java
index 5e4cbd6..c29af0b 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java
@@ -39,6 +39,7 @@ import org.apache.ignite.testframework.junits.common.*;
 import org.jetbrains.annotations.*;
 
 import java.io.*;
+import java.nio.*;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -155,7 +156,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
         GridMarshallerTestBean inBean = newTestBean(cache);
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -185,7 +186,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
         GridMarshallerTestBean inBean = newTestBean(cache);
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -213,7 +214,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
     public void testMarshalling() throws Exception {
         GridMarshallerTestBean inBean = newTestBean(new Object());
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -250,7 +251,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
             }
         });
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -287,7 +288,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
         GridMarshallerTestBean inBean = newTestBean(new LocalRunnable());
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -314,7 +315,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
     public void testMarshallingNestedClassInstance() throws Exception {
         GridMarshallerTestBean inBean = newTestBean(new NestedClass());
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -341,7 +342,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
     public void testMarshallingStaticNestedClassInstance() throws Exception {
         GridMarshallerTestBean inBean = newTestBean(new StaticNestedClass());
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -368,7 +369,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
     public void testMarshallingNullObject() throws Exception {
         GridMarshallerTestBean inBean = newTestBean(null);
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -430,7 +431,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
         ComputeTask<?, ?> inTask = (ComputeTask<?, 
?>)tstClsLdr.loadClass(GridP2PTestTask.class.getName()).
             newInstance();
 
-        byte[] buf = marsh.marshal(inTask);
+        ByteBuffer buf = marsh.marshal(inTask);
 
         ComputeTask<?, ?> outTask = marsh.unmarshal(buf, tstClsLdr);
 
@@ -446,7 +447,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
     public void testGridKernalMarshalling() throws Exception {
         GridMarshallerTestBean inBean = newTestBean(grid());
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -478,7 +479,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
             }
         }));
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -502,7 +503,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
     public void testLoggerMarshalling() throws Exception {
         GridMarshallerTestBean inBean = newTestBean(grid().log());
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -534,7 +535,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
         GridMarshallerTestBean inBean = newTestBean(loc);
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -565,7 +566,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
         GridMarshallerTestBean inBean = newTestBean(inSrvc);
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -594,7 +595,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
     public void testKernalContext() throws Exception {
         GridMarshallerTestBean inBean = 
newTestBean(GridKernalTestUtils.context(grid()));
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -626,7 +627,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
         GridMarshallerTestBean inBean = newTestBean(scheduler);
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -660,7 +661,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
             GridMarshallerTestBean inBean = newTestBean(compute);
 
-            byte[] buf = marshal(inBean);
+            ByteBuffer buf = marshal(inBean);
 
             GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -702,7 +703,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
             GridMarshallerTestBean inBean = newTestBean(evts);
 
-            byte[] buf = marshal(inBean);
+            ByteBuffer buf = marshal(inBean);
 
             GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -738,7 +739,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
             GridMarshallerTestBean inBean = newTestBean(messaging);
 
-            byte[] buf = marshal(inBean);
+            ByteBuffer buf = marshal(inBean);
 
             GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -774,7 +775,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
             GridMarshallerTestBean inBean = newTestBean(services);
 
-            byte[] buf = marshal(inBean);
+            ByteBuffer buf = marshal(inBean);
 
             GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -807,7 +808,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
 
         GridMarshallerTestBean inBean = newTestBean(streamer);
 
-        byte[] buf = marshal(inBean);
+        ByteBuffer buf = marshal(inBean);
 
         GridMarshallerTestBean outBean = unmarshal(buf);
 
@@ -846,7 +847,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
      * @return Byte buffer.
      * @throws IgniteCheckedException Thrown if any exception occurs while 
marshalling.
      */
-    protected static byte[] marshal(Object bean) throws IgniteCheckedException 
{
+    protected static ByteBuffer marshal(Object bean) throws 
IgniteCheckedException {
         return marsh.marshal(bean);
     }
 
@@ -856,7 +857,7 @@ public abstract class GridMarshallerAbstractTest extends 
GridCommonAbstractTest
      * @throws IgniteCheckedException Thrown if any exception occurs while 
unmarshalling.
      */
     @SuppressWarnings({"RedundantTypeArguments"})
-    protected static <T> T unmarshal(byte[] buf) throws IgniteCheckedException 
{
+    protected static <T> T unmarshal(ByteBuffer buf) throws 
IgniteCheckedException {
         return marsh.<T>unmarshal(buf, 
Thread.currentThread().getContextClassLoader());
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
 
b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
index df00966..c414fee 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
@@ -98,7 +98,7 @@ public class GridMarshallerPerformanceTest extends 
GridCommonAbstractTest {
      * @throws Exception If failed.
      */
     public void testGridMarshaller() throws Exception {
-        final GridTuple<byte[]> tuple = new GridTuple<>();
+        final GridTuple<ByteBuffer> tuple = new GridTuple<>();
 
         final OptimizedMarshaller marsh = new OptimizedMarshaller();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
index 81865c3..323cca2 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
@@ -20,6 +20,8 @@ package org.apache.ignite.marshaller.optimized;
 import junit.framework.*;
 import org.apache.ignite.marshaller.*;
 
+import java.nio.*;
+
 /**
  *
  */
@@ -32,7 +34,7 @@ public class OptimizedMarshallerEnumSelfTest extends TestCase 
{
 
         marsh.setContext(new MarshallerContextTestImpl());
 
-        byte[] bytes = marsh.marshal(TestEnum.Bond);
+        ByteBuffer bytes = marsh.marshal(TestEnum.Bond);
 
         TestEnum unmarshalled = marsh.unmarshal(bytes, 
Thread.currentThread().getContextClassLoader());
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSelfTest.java
index 7d09070..8db33f7 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSelfTest.java
@@ -18,12 +18,14 @@
 package org.apache.ignite.marshaller.optimized;
 
 import org.apache.ignite.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.*;
 import org.apache.ignite.testframework.*;
 import org.apache.ignite.testframework.junits.common.*;
 
 import java.io.*;
+import java.nio.*;
 import java.util.concurrent.*;
 
 /**
@@ -42,7 +44,7 @@ public class OptimizedMarshallerSelfTest extends 
GridMarshallerAbstractTest {
     public void testTestMarshalling() throws Exception {
         final String msg = "PASSED";
 
-        byte[] buf = marshal(new IgniteRunnable() {
+        ByteBuffer buf = marshal(new IgniteRunnable() {
             @Override public void run() {
                 c1.apply(msg);
                 c2.apply(msg);
@@ -88,7 +90,7 @@ public class OptimizedMarshallerSelfTest extends 
GridMarshallerAbstractTest {
 
                     arr[0] = (byte)200;
 
-                    unmarshal(arr);
+                    unmarshal(ByteBuffer.wrap(arr));
 
                     return null;
                 }
@@ -132,10 +134,9 @@ public class OptimizedMarshallerSelfTest extends 
GridMarshallerAbstractTest {
         /** {@inheritDoc} */
         private void writeObject(ObjectOutputStream out) throws IOException {
             try {
-                byte[] arr = marshal(str);
+                ByteBuffer buf = marshal(str);
 
-                out.writeInt(arr.length);
-                out.write(arr);
+                U.writeByteBuffer(out, buf);
 
                 out.writeInt(val);
             }
@@ -148,11 +149,9 @@ public class OptimizedMarshallerSelfTest extends 
GridMarshallerAbstractTest {
         @SuppressWarnings("UnusedParameters")
         private void readObject(ObjectInputStream in) throws IOException {
             try {
-                byte[] arr = new byte[in.readInt()];
+                ByteBuffer buf = U.readByteBuffer(in);
 
-                in.read(arr);
-
-                str = unmarshal(arr);
+                str = unmarshal(buf);
 
                 val = in.readInt();
             }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerTest.java
 
b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerTest.java
index 59d9a4d..934c24e 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerTest.java
@@ -30,6 +30,7 @@ import java.io.*;
 import java.lang.reflect.*;
 import java.lang.reflect.Proxy;
 import java.net.*;
+import java.nio.*;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -75,7 +76,7 @@ public class OptimizedMarshallerTest extends 
GridCommonAbstractTest {
 
         marsh.setRequireSerializable(false);
 
-        byte[] bytes = marsh.marshal(new TcpDiscoveryVmIpFinder());
+        ByteBuffer bytes = marsh.marshal(new TcpDiscoveryVmIpFinder());
 
         TcpDiscoveryIpFinder ipFinder = marsh.unmarshal(bytes, null);
 
@@ -112,7 +113,7 @@ public class OptimizedMarshallerTest extends 
GridCommonAbstractTest {
 
         ipFinder.setShared(false);
 
-        byte[] bytes = marsh.marshal(ipFinder);
+        ByteBuffer bytes = marsh.marshal(ipFinder);
 
         ipFinder = marsh.unmarshal(bytes, null);
 
@@ -129,7 +130,7 @@ public class OptimizedMarshallerTest extends 
GridCommonAbstractTest {
 
         marsh.setRequireSerializable(false);
 
-        byte[] bytes = marsh.marshal(new TestTcpDiscoveryIpFinderAdapter());
+        ByteBuffer bytes = marsh.marshal(new 
TestTcpDiscoveryIpFinderAdapter());
 
         TcpDiscoveryIpFinder ipFinder = marsh.unmarshal(bytes, null);
 
@@ -146,9 +147,7 @@ public class OptimizedMarshallerTest extends 
GridCommonAbstractTest {
 
         marsh.setRequireSerializable(false);
 
-        byte[] bytes = marsh.marshal(new GridMarshallerTestInheritedBean());
-
-        info(Arrays.toString(bytes));
+        ByteBuffer bytes = marsh.marshal(new 
GridMarshallerTestInheritedBean());
 
         GridMarshallerTestInheritedBean bean = marsh.unmarshal(bytes, null);
 
@@ -163,7 +162,7 @@ public class OptimizedMarshallerTest extends 
GridCommonAbstractTest {
     public void testNonSerializable5() throws IgniteCheckedException {
         Marshaller marsh = marshaller();
 
-        byte[] bytes = marsh.marshal(true);
+        ByteBuffer bytes = marsh.marshal(true);
 
         Boolean val = marsh.unmarshal(bytes, null);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
index 5f63730..09adbb6 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
@@ -717,7 +717,7 @@ public class OptimizedObjectStreamSelfTest extends 
GridCommonAbstractTest {
 
         byte[] bytes = "line1\nline2\r\nli\rne3\nline4".getBytes();
 
-        in.in().bytes(bytes, bytes.length);
+        in.in().bytes(bytes, 0, bytes.length);
 
         assertEquals("line1", in.readLine());
         assertEquals("line2", in.readLine());
@@ -891,7 +891,7 @@ public class OptimizedObjectStreamSelfTest extends 
GridCommonAbstractTest {
             for (int i = 0; i < arr.length; i++)
                 arr[i] = (byte)i;
 
-            in.in().bytes(arr, arr.length);
+            in.in().bytes(arr, 0, arr.length);
 
             byte[] buf = new byte[10];
 
@@ -1032,7 +1032,7 @@ public class OptimizedObjectStreamSelfTest extends 
GridCommonAbstractTest {
 
             in.context(CTX, null, getClass().getClassLoader());
 
-            in.in().bytes(arr, arr.length);
+            in.in().bytes(arr, 0, arr.length);
 
             Object obj0 = in.readObject();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/session/GridSessionCheckpointAbstractSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/session/GridSessionCheckpointAbstractSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/session/GridSessionCheckpointAbstractSelfTest.java
index d6d34fa..8b26344 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/session/GridSessionCheckpointAbstractSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/session/GridSessionCheckpointAbstractSelfTest.java
@@ -27,6 +27,7 @@ import org.apache.ignite.spi.checkpoint.*;
 import org.apache.ignite.testframework.junits.common.*;
 
 import java.io.*;
+import java.nio.*;
 import java.util.*;
 
 /**
@@ -62,7 +63,7 @@ public abstract class GridSessionCheckpointAbstractSelfTest 
extends GridCommonAb
 
         assert marshaller != null;
 
-        String state = marshaller.unmarshal(serState, 
getClass().getClassLoader());
+        String state = marshaller.unmarshal(ByteBuffer.wrap(serState), 
getClass().getClassLoader());
 
         assert state != null : "Global state is missing: " + globalKey;
         assert state.equals(globalState) : "Invalid state value: " + state;
@@ -90,14 +91,14 @@ public abstract class GridSessionCheckpointAbstractSelfTest 
extends GridCommonAb
 
         byte[] serState = spi.loadCheckpoint(sesKey);
 
-        String state = marsh.unmarshal(serState, cl);
+        String state = marsh.unmarshal(ByteBuffer.wrap(serState), cl);
 
         assert state != null : "Session state is missing: " + sesKey;
         assert state.equals(sesState) : "Invalid state value: " + state;
 
         serState = spi.loadCheckpoint(globalKey);
 
-        state = marsh.unmarshal(serState, cl);
+        state = marsh.unmarshal(ByteBuffer.wrap(serState), cl);
 
         assert state != null : "Global state is missing: " + globalKey;
         assert state.equals(globalState) : "Invalid state value: " + state;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/core/src/test/java/org/apache/ignite/spi/swapspace/GridSwapSpaceSpiAbstractSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/spi/swapspace/GridSwapSpaceSpiAbstractSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/spi/swapspace/GridSwapSpaceSpiAbstractSelfTest.java
index 038198a..e30d84a 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/spi/swapspace/GridSwapSpaceSpiAbstractSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/spi/swapspace/GridSwapSpaceSpiAbstractSelfTest.java
@@ -25,6 +25,7 @@ import org.apache.ignite.testframework.junits.common.*;
 import org.jetbrains.annotations.*;
 
 import java.io.*;
+import java.nio.*;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -490,7 +491,7 @@ public abstract class GridSwapSpaceSpiAbstractSelfTest 
extends GridCommonAbstrac
             while (iter.hasNext()) {
                 Map.Entry<byte[], byte[]> next = iter.next();
 
-                String key = 
getTestResources().getMarshaller().unmarshal(next.getKey(), null);
+                String key = 
getTestResources().getMarshaller().unmarshal(ByteBuffer.wrap(next.getKey()), 
null);
 
                 info("Got from iterator [key=" + key + ", val=" + new 
String(next.getValue()));
 
@@ -530,7 +531,7 @@ public abstract class GridSwapSpaceSpiAbstractSelfTest 
extends GridCommonAbstrac
             while (iter.hasNext()) {
                 Map.Entry<byte[], byte[]> next = iter.next();
 
-                String key = 
getTestResources().getMarshaller().unmarshal(next.getKey(), null);
+                String key = 
getTestResources().getMarshaller().unmarshal(ByteBuffer.wrap(next.getKey()), 
null);
 
                 info("Got from iterator [key=" + key + ", val=" + new 
String(next.getValue()));
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopMarshallerFilter.java
----------------------------------------------------------------------
diff --git 
a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopMarshallerFilter.java
 
b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopMarshallerFilter.java
index 4cba117..cb45820 100644
--- 
a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopMarshallerFilter.java
+++ 
b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopMarshallerFilter.java
@@ -22,6 +22,8 @@ import org.apache.ignite.internal.processors.hadoop.message.*;
 import org.apache.ignite.internal.util.nio.*;
 import org.apache.ignite.marshaller.*;
 
+import java.nio.*;
+
 /**
  * Serialization filter.
  */
@@ -64,7 +66,8 @@ public class HadoopMarshallerFilter extends 
GridNioFilterAdapter {
         assert msg instanceof byte[];
 
         // Always unmarshal with system classloader.
-        proceedMessageReceived(ses, marshaller.unmarshal((byte[])msg, null));
+        // TODO: IGNITE-471 - Is this correct?
+        proceedMessageReceived(ses, marshaller.unmarshal((ByteBuffer)msg, 
null));
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java
----------------------------------------------------------------------
diff --git 
a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java
 
b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java
index ae6bafa..b527a79 100644
--- 
a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java
+++ 
b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java
@@ -34,7 +34,7 @@ import static 
org.apache.ignite.internal.util.offheap.unsafe.GridUnsafeMemory.*;
 /**
  *
  */
-public class HadoopConcurrentHashMultimapSelftest extends 
HadoopAbstractMapTest {
+public class HadoopConcurrentHashMultimapSelfTest extends 
HadoopAbstractMapTest {
     /** */
     public void testMapSimple() throws Exception {
         GridUnsafeMemory mem = new GridUnsafeMemory(0);
@@ -151,7 +151,7 @@ public class HadoopConcurrentHashMultimapSelftest extends 
HadoopAbstractMapTest
 
                 UNSAFE.copyMemory(null, ptr, buf, BYTE_ARR_OFF, size);
 
-                dataInput.bytes(buf, size);
+                dataInput.bytes(buf, 0, size);
 
                 try {
                     w.readFields(dataInput);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopSkipListSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopSkipListSelfTest.java
 
b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopSkipListSelfTest.java
index 8a046e0..eeb5ec0 100644
--- 
a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopSkipListSelfTest.java
+++ 
b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopSkipListSelfTest.java
@@ -187,7 +187,7 @@ public class HadoopSkipListSelfTest extends 
HadoopAbstractMapTest {
 
                 UNSAFE.copyMemory(null, ptr, buf, BYTE_ARR_OFF, size);
 
-                dataInput.bytes(buf, size);
+                dataInput.bytes(buf, 0, size);
 
                 try {
                     w.readFields(dataInput);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/hadoop/src/test/java/org/apache/ignite/testsuites/IgniteHadoopTestSuite.java
----------------------------------------------------------------------
diff --git 
a/modules/hadoop/src/test/java/org/apache/ignite/testsuites/IgniteHadoopTestSuite.java
 
b/modules/hadoop/src/test/java/org/apache/ignite/testsuites/IgniteHadoopTestSuite.java
index 4d2a4b6..9538d05 100644
--- 
a/modules/hadoop/src/test/java/org/apache/ignite/testsuites/IgniteHadoopTestSuite.java
+++ 
b/modules/hadoop/src/test/java/org/apache/ignite/testsuites/IgniteHadoopTestSuite.java
@@ -26,8 +26,6 @@ import org.apache.ignite.igfs.*;
 import org.apache.ignite.internal.processors.hadoop.*;
 import org.apache.ignite.internal.processors.hadoop.shuffle.collections.*;
 import org.apache.ignite.internal.processors.hadoop.shuffle.streams.*;
-import org.apache.ignite.internal.processors.hadoop.taskexecutor.external.*;
-import 
org.apache.ignite.internal.processors.hadoop.taskexecutor.external.communication.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 
@@ -88,7 +86,7 @@ public class IgniteHadoopTestSuite extends TestSuite {
 
         suite.addTest(new 
TestSuite(ldr.loadClass(HadoopHashMapSelfTest.class.getName())));
         suite.addTest(new 
TestSuite(ldr.loadClass(HadoopDataStreamSelfTest.class.getName())));
-        suite.addTest(new 
TestSuite(ldr.loadClass(HadoopConcurrentHashMultimapSelftest.class.getName())));
+        suite.addTest(new 
TestSuite(ldr.loadClass(HadoopConcurrentHashMultimapSelfTest.class.getName())));
 
         suite.addTest(new 
TestSuite(ldr.loadClass(HadoopSkipListSelfTest.class.getName())));
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d838a9db/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
----------------------------------------------------------------------
diff --git 
a/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
 
b/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
index 9b9f2aa..e2fe963 100644
--- 
a/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
+++ 
b/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
@@ -32,6 +32,7 @@ import org.jetbrains.annotations.*;
 import javax.cache.integration.*;
 import java.io.*;
 import java.net.*;
+import java.nio.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
@@ -569,7 +570,7 @@ public class CacheHibernateBlobStore<K, V> extends 
CacheStoreAdapter<K, V> {
      * @throws IgniteCheckedException If failed to convert.
      */
     protected byte[] toBytes(Object obj) throws IgniteCheckedException {
-        return ignite.configuration().getMarshaller().marshal(obj);
+        return U.toArray(ignite.configuration().getMarshaller().marshal(obj));
     }
 
     /**
@@ -584,7 +585,7 @@ public class CacheHibernateBlobStore<K, V> extends 
CacheStoreAdapter<K, V> {
         if (bytes == null || bytes.length == 0)
             return null;
 
-        return ignite.configuration().getMarshaller().unmarshal(bytes, 
getClass().getClassLoader());
+        return 
ignite.configuration().getMarshaller().unmarshal(ByteBuffer.wrap(bytes), 
getClass().getClassLoader());
     }
 
     /**

Reply via email to