Skip to content

Commit

Permalink
[SPARK-12060][CORE] Avoid memory copy in JavaSerializerInstance.seria…
Browse files Browse the repository at this point in the history
…lize

Merged apache#10051 again since apache#10083 is resolved.

This reverts commit 328b757.

Author: Shixiong Zhu <[email protected]>

Closes apache#10167 from zsxwing/merge-SPARK-12060.
  • Loading branch information
zsxwing committed Dec 7, 2015
1 parent 5d80d8c commit 3f4efb5
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ import scala.reflect.ClassTag

import org.apache.spark.SparkConf
import org.apache.spark.annotation.DeveloperApi
import org.apache.spark.util.ByteBufferInputStream
import org.apache.spark.util.Utils
import org.apache.spark.util.{ByteBufferInputStream, ByteBufferOutputStream, Utils}

private[spark] class JavaSerializationStream(
out: OutputStream, counterReset: Int, extraDebugInfo: Boolean)
Expand Down Expand Up @@ -96,11 +95,11 @@ private[spark] class JavaSerializerInstance(
extends SerializerInstance {

override def serialize[T: ClassTag](t: T): ByteBuffer = {
val bos = new ByteArrayOutputStream()
val bos = new ByteBufferOutputStream()
val out = serializeStream(bos)
out.writeObject(t)
out.close()
ByteBuffer.wrap(bos.toByteArray)
bos.toByteBuffer
}

override def deserialize[T: ClassTag](bytes: ByteBuffer): T = {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
* 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.spark.util

import java.io.ByteArrayOutputStream
import java.nio.ByteBuffer

/**
* Provide a zero-copy way to convert data in ByteArrayOutputStream to ByteBuffer
*/
private[spark] class ByteBufferOutputStream extends ByteArrayOutputStream {

def toByteBuffer: ByteBuffer = {
return ByteBuffer.wrap(buf, 0, count)
}
}

0 comments on commit 3f4efb5

Please sign in to comment.