當前位置:
首頁 > 知識 > bencode對象編碼實現

bencode對象編碼實現

承接上文,使用遞歸可以很簡單的就實現了一個bencode編碼函數

package com.norkts.torrents;

import org.junit.Assert;

import java.util.*;

/**
* bencode文件編碼
* @author norkts
* @date 2017-06-23
* @version 1.0
*/
public class Bencoder {

/**
* 將對象使用bencode格式編碼
* @param target
* @return
*/
public static String encode(Object target){

StringBuilder sb = new StringBuilder;

if(target instanceof Map){

//字典類型
sb.append("d");

for(Map.Entry entry : ((Map)target).entrySet){
String key = entry.getKey;
Object value = entry.getValue;
sb.append(encode(key));
sb.append(encode(value));
}

sb.append("e");
}else if(target instanceof List){
//列表類型處理
sb.append("l");
for(Object item : (List)target){
sb.append(encode(item));
}
sb.append("e");

}else if(target instanceof String){
//字元串類型處理
sb.append(((String)target).length + ":" + target);
}else{
//數字處理
sb.append("i" + Integer.toString((Integer)target, 10) + "e");
}

return sb.toString;
}

public static void main(String[] argv){
Object target = new LinkedHashMap;
((Map)target).put("a", "1");
((Map)target).put("b", 2);
((Map)target).put("c", -3);

Assert.assertEquals("d1:a1:11:bi2e1:ci-3ee", encode(target));

target = new LinkedHashMap;
((Map) target).put("key1", "val1");
((Map) target).put("key2", 100);

List li = new ArrayList;
li.add("item1");
li.add(-100);
li.add(((ArrayList) li).clone);
li.add(((LinkedHashMap) target).clone);

((Map) target).put("key3", li);

System.out.println(encode(target));
Assert.assertEquals("d4:key14:val14:key2i100e4:key3l5:item1i-100el5:item1i-100eed4:key14:val14:key2i100eeee", encode(target));

System.out.println(BencodeDecoder.decode(encode(target).getBytes));
}
}

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

虛擬機是如何載入類的
WPF:實現 ScrollViewer 滾動到指定控制項處
ElasticSearch裡面的路由功能介紹

TAG:科技優家 |

您可能感興趣

基於TensorFlow的變分自編碼器實現
TensorFlow 支持 Unicode 編碼
short數組保存unicode編碼和unicode編碼轉換成shrot數組
Python 編碼規範(Google)
淺談Python編碼
Oculus大更新包含5K視頻編碼支持和Oculus Home新功能
Python Unicode編碼混亂 :來自大洋彼岸的怨念
Python Unicode編碼混亂:來自大洋彼岸的怨念
Science immunology:編碼基孔肯亞病毒中和抗體的mRNA 為免疫治療帶來新策略
【視頻編碼】Content Aware ABR技術
python編碼最佳實踐之總結
Python判斷網頁編碼
思科軟體再次發現硬編碼密碼;AR/VR 開發工具 Amazon Sumerian 正式上線
Adv.Funct.Mater.:通過多肽噴墨列印為生物礦化結構編碼細胞微圖案
也談 Python 的中文編碼問題
Facebook新研究:一個編碼器hold住93種語言!跨語言遷移無需修改
Facebook 360度音頻編碼與渲染
谷歌大腦Wasserstein自編碼器:新一代生成模型演算法
python 字元編碼處理總結
誰說Win平台Pr用戶不能輸出Prores編碼來著?