001/* 002 * Copyright 2006 - 2013 003 * Stefan Balev <stefan.balev@graphstream-project.org> 004 * Julien Baudry <julien.baudry@graphstream-project.org> 005 * Antoine Dutot <antoine.dutot@graphstream-project.org> 006 * Yoann Pigné <yoann.pigne@graphstream-project.org> 007 * Guilhelm Savin <guilhelm.savin@graphstream-project.org> 008 * 009 * This file is part of GraphStream <http://graphstream-project.org>. 010 * 011 * GraphStream is a library whose purpose is to handle static or dynamic 012 * graph, create them from scratch, file or any source and display them. 013 * 014 * This program is free software distributed under the terms of two licenses, the 015 * CeCILL-C license that fits European law, and the GNU Lesser General Public 016 * License. You can use, modify and/ or redistribute the software under the terms 017 * of the CeCILL-C license as circulated by CEA, CNRS and INRIA at the following 018 * URL <http://www.cecill.info> or under the terms of the GNU LGPL as published by 019 * the Free Software Foundation, either version 3 of the License, or (at your 020 * option) any later version. 021 * 022 * This program is distributed in the hope that it will be useful, but WITHOUT ANY 023 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 024 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 025 * 026 * You should have received a copy of the GNU Lesser General Public License 027 * along with this program. If not, see <http://www.gnu.org/licenses/>. 028 * 029 * The fact that you are presently reading this means that you have had 030 * knowledge of the CeCILL-C and LGPL licenses and that you accept their terms. 031 */ 032package org.graphstream.stream.netstream.packing; 033 034/** 035* 036* Copyright (c) 2010 University of Luxembourg 037* 038* @file Base64Unpacker.java 039* @date Dec 20, 2011 040* 041* @author Yoann Pigné 042* 043*/ 044 045import java.io.IOException; 046import java.nio.ByteBuffer; 047 048/** 049 * 050 */ 051public class Base64Unpacker extends NetStreamUnpacker { 052 053 /* (non-Javadoc) 054 * @see org.graphstream.stream.netstream.packing.NetStreamUnpacker#unpackMessage(java.nio.ByteBuffer, int, int) 055 */ 056 @Override 057 public ByteBuffer unpackMessage(ByteBuffer buffer, int startIndex, 058 int endIndex) { 059 try { 060 byte[] raw = Base64.decode(buffer.array(), startIndex, (endIndex-startIndex), Base64.NO_OPTIONS); 061 return ByteBuffer.wrap(raw); 062 063 } catch (IOException e) { 064 // TODO Auto-generated catch block 065 e.printStackTrace(); 066 } 067 return null; 068 } 069 070 /* (non-Javadoc) 071 * @see org.graphstream.stream.netstream.packing.NetStreamUnpacker#packMessageSize(java.nio.ByteBuffer) 072 */ 073 @Override 074 public int unpackMessageSize(ByteBuffer buffer) { 075 try { 076 byte[] raw = Base64.decode(buffer.array(),buffer.position(), 8,Base64.NO_OPTIONS); 077 return ByteBuffer.wrap(raw).getInt(); 078 } catch (IOException e) { 079 // TODO Auto-generated catch block 080 e.printStackTrace(); 081 } 082 return -1; 083 } 084 085 public static void main(String[] args) { 086 Base64Packer packer = new Base64Packer(); 087 Base64Unpacker b = new Base64Unpacker(); 088 089 ByteBuffer source = ByteBuffer.allocate(9); 090 091 source.putInt(-1).putFloat(0.1f); 092 source.put((byte)'e'); 093 094 source.rewind(); 095 096 ByteBuffer bb = b.unpackMessage(packer.packMessage( source ) ); 097 098 bb.rewind(); 099 100 System.out.println(bb.getInt()); 101 System.out.println(bb.getFloat()); 102 System.out.println((char)bb.get()); 103 } 104 105 /* (non-Javadoc) 106 * @see org.graphstream.stream.netstream.packing.NetStreamUnpacker#sizeOfInt() 107 */ 108 @Override 109 public int sizeOfInt() { 110 return 8; 111 } 112}