/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.media.extra; import java.nio.ByteBuffer; import java.util.List; /** * bitデータのコネクト処理 * @author taktod */ public class BitConnector { private int data = 0; private int left = 0; /** * 接続します。 * @param bits */ public ByteBuffer connect(Bit... bits) { data = 0; left = 0; int size = 0; for(Bit bit : bits) { size += bit.bitCount; } ByteBuffer buffer = ByteBuffer.allocate((int)(Math.ceil(size / 8.0D))); for(Bit bit : bits) { data = (data << bit.bitCount) | bit.get(); left += bit.bitCount; while(left > 8) { left -= 8; buffer.put((byte)((data >>> left) & 0xFF)); } } buffer.put((byte)((data >>> (8 - left)) & 0xFF)); buffer.flip(); return buffer; } /** * collectionFrameWorkの場合 * @param bits * @return */ public ByteBuffer connect(List<Bit> bits) { return connect(bits.toArray(new Bit[]{})); } }