blob: f3e76c73cdfb83563e9fdb18119e31b5be246cbd [file] [log] [blame]
/*
* Copyright (c) 2011, 2012, 2015, 2016, 2019 Eike Stepper (Loehne, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.common.lob;
import org.eclipse.emf.cdo.spi.common.CDOLobStoreImpl;
import org.eclipse.net4j.util.HexUtil;
import org.eclipse.net4j.util.io.ExtendedDataInput;
import org.eclipse.net4j.util.io.IOUtil;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* An identifiable binary large object with streaming support.
*
* @author Eike Stepper
* @since 4.0
*/
public final class CDOBlob extends CDOLob<InputStream>
{
public CDOBlob(InputStream contents) throws IOException
{
super(contents, CDOLobStoreImpl.INSTANCE);
}
public CDOBlob(InputStream contents, CDOLobStore store) throws IOException
{
super(contents, store);
}
/**
* @since 4.13
*/
public CDOBlob(byte[] contents, CDOLobStore store) throws IOException
{
super(new ByteArrayInputStream(contents), store);
}
/**
* @since 4.13
*/
public CDOBlob(String contents, CDOLobStore store) throws IOException
{
super(new ByteArrayInputStream(HexUtil.hexToBytes(contents)), store);
}
CDOBlob(byte[] id, long size)
{
super(id, size);
}
CDOBlob(ExtendedDataInput in) throws IOException
{
super(in);
}
@Override
public InputStream getContents() throws IOException
{
return getStore().getBinary(this);
}
/**
* @since 4.13
*/
public byte[] getBytes() throws IOException
{
InputStream inputStream = null;
try
{
inputStream = getContents();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
IOUtil.copy(inputStream, outputStream);
return outputStream.toByteArray();
}
finally
{
IOUtil.close(inputStream);
}
}
/**
* @since 4.13
*/
@Override
public String getString() throws IOException
{
return HexUtil.bytesToHex(getBytes());
}
@Override
protected CDOLobInfo put(InputStream contents) throws IOException
{
return getStore().putBinary(contents);
}
}