/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.container.mkv; import java.nio.ByteBuffer; import org.apache.log4j.Logger; import com.ttProject.nio.channels.IReadChannel; import com.ttProject.unit.extra.BitConnector; import com.ttProject.unit.extra.EbmlValue; import com.ttProject.util.BufferUtil; /** * mkvBinaryTag * @author taktod */ public abstract class MkvBinaryTag extends MkvTag { /** logger */ @SuppressWarnings("unused") private Logger logger = Logger.getLogger(MkvBinaryTag.class); private ByteBuffer buffer = null; /** * constructor * @param id * @param size */ public MkvBinaryTag(Type id, EbmlValue size) { super(id, size); } /** * {@inheritDoc} */ @Override public void load(IReadChannel channel) throws Exception { buffer = BufferUtil.safeRead(channel, getRemainedSize()); super.load(channel); } /** * ref the data size to read on load func. * @return */ protected int getRemainedSize() { return getMkvSize(); } /** * ref the binary data. * @return */ public ByteBuffer getMkvData() { return buffer.duplicate(); } /** * set the binary data. * @param data */ public void setValue(ByteBuffer data) { buffer = data.duplicate(); getTagSize().set(buffer.remaining()); super.update(); } /** * {@inheritDoc} */ @Override protected void requestUpdate() throws Exception { if(buffer == null) { throw new Exception("buffer data is undefined."); } BitConnector connector = new BitConnector(); ByteBuffer data = BufferUtil.connect( connector.connect(getTagId(), getTagSize()), buffer ); setSize(data.remaining()); super.setData(data); } /** * {@inheritDoc} */ @Override public String toString(String space) { StringBuilder data = new StringBuilder(); data.append(super.toString(space)); if(buffer == null) { data.append(" binary:").append("null"); } else { data.append(" binary:").append(Integer.toHexString(buffer.remaining())); } return data.toString(); } }