Advertisement
Chiddix

BencodeEncoder v1.0.0

Aug 23rd, 2014
343
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.94 KB | None | 0 0
  1. package me.rabrg.torrent.bencode;
  2.  
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.Map.Entry;
  7.  
  8. /**
  9.  *
  10.  * @author Ryan Greene
  11.  *
  12.  */
  13. public final class BencodeEncoder {
  14.  
  15.     @SuppressWarnings("unchecked")
  16.     public String encode(final Object object) {
  17.         if (object instanceof String) {
  18.             return encodeString((String) object);
  19.         } else if (object instanceof Integer) {
  20.             return encodeInteger((int) object);
  21.         } else if (object instanceof List) {
  22.             return encodeList((List<Object>) object);
  23.         } else if (object instanceof Map) {
  24.             return encodeMap((Map<String, Object>) object);
  25.         }
  26.         throw new IllegalStateException("the object " + object + " is not a type that can be encoded in bencode");
  27.     }
  28.  
  29.     public String encodeString(final String string) {
  30.         return new StringBuffer().append(string.length()).append(':').append(string).toString();
  31.     }
  32.  
  33.     public String encodeInteger(final int integer) {
  34.         return new StringBuffer().append('i').append(integer).append('e').toString();
  35.     }
  36.  
  37.     public String encodeList(final List<Object> list) {
  38.         final StringBuffer stringBuffer = new StringBuffer().append('l');
  39.         for (final Object object : list) {
  40.             stringBuffer.append(encode(object));
  41.         }
  42.         return stringBuffer.append('e').toString();
  43.     }
  44.  
  45.     public String encodeMap(final Map<String, Object> map) {
  46.         final StringBuffer stringBuffer = new StringBuffer().append('d');
  47.         final Iterator<Entry<String, Object>> iterator = map.entrySet().iterator();
  48.         while (iterator.hasNext()) {
  49.             final Entry<String, Object> entry = iterator.next();
  50.             stringBuffer.append(encodeString(entry.getKey())).append(encode(entry.getVa​lue()));    
  51.             iterator.remove();
  52.         }
  53.         return stringBuffer.append('e').toString();
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement