资源简介

开源bittorrent协议实现,想学习或者做bt项目的同学可以参考。包含bencode,DHT,bittorrent 的完整实现

资源截图

代码片段和文件信息

/*
 * Copyright (c) 2016—2017 Andrei Tomashpolskiy and individual contributors.
 *
 * Licensed under the Apache License Version 2.0 (the “License“);
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing software
 * distributed under the License is distributed on an “AS IS“ BASIS
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package bt.bencoding;

import bt.bencoding.model.BEInteger;
import bt.bencoding.model.BEList;
import bt.bencoding.model.BEMap;
import bt.bencoding.model.BEobject;
import bt.bencoding.model.BEString;

import java.io.IOException;
import java.io.OutputStream;
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;
import java.util.objects;
import java.util.TreeMap;
import java.util.function.BinaryOperator;
import java.util.stream.Collectors;

/**
 * BEncoding encoder.
 *
 * @since 1.0
 */
public class BEEncoder {

    private static final Charset defaultCharset = Charset.forName(“UTF-8“);
    private static final BEEncoder instance = new BEEncoder();

    /**
     * Get default encoder.
     *
     * @since 1.0
     */
    public static BEEncoder encoder() {
        return instance;
    }

    /**
     * Write bencoded string to a binary output.
     *
     * @since 1.0
     */
    public void encode(BEString string OutputStream out) throws IOException {

        objects.requireNonNull(string);

        byte[] bytes = string.getValue();
        encodeString(bytes out);
    }

    private void encodeString(byte[] bytes OutputStream out) throws IOException {
        write(out Integer.toString(bytes.length).getBytes(defaultCharset));
        write(out ‘:‘);
        write(out bytes);
    }

    /**
     * Write bencoded integer to a binary output.
     *
     * @since 1.0
     */
    public void encode(BEInteger integer OutputStream out) throws IOException {

        objects.requireNonNull(integer);

        BigInteger value = integer.getValue();
        write(out BEParser.INTEGER_PREFIX);
        write(out Integer.toString(value.intValueExact()).getBytes(defaultCharset));
        write(out BEParser.EOF);
    }

    /**
     * Write bencoded list to a binary output.
     *
     * @since 1.0
     */
    public void encode(BEList list OutputStream out) throws IOException {

        objects.requireNonNull(list);

        Listject> values = list.getValue();
        write(out BEParser.LIST_PREFIX);

        for (BEobject value : values) {
            value.writeTo(out);
        }

        write(out BEParser.EOF);
    }

    /**
     * Write bencoded dictionary to a binary output.
     *
     * @since 1.0
     */
    public void encode(BEMap map

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-01-15 19:00  bt-master\
     文件          85  2019-01-15 19:00  bt-master\.gitignore
     文件        1982  2019-01-15 19:00  bt-master\.travis.yml
     文件       11358  2019-01-15 19:00  bt-master\LICENSE
     文件       12581  2019-01-15 19:00  bt-master\README.md
     文件        8227  2019-01-15 19:00  bt-master\RELEASE-NOTES.md
     文件        4020  2019-01-15 19:00  bt-master\UPGRADE.md
     文件         344  2019-01-15 19:00  bt-master\appveyor.yml
     目录           0  2019-01-15 19:00  bt-master\bt-bencoding\
     文件        1602  2019-01-15 19:00  bt-master\bt-bencoding\pom.xml
     目录           0  2019-01-15 19:00  bt-master\bt-bencoding\src\
     目录           0  2019-01-15 19:00  bt-master\bt-bencoding\src\main\
     目录           0  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\
     目录           0  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\
     目录           0  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\
     文件        4009  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BEEncoder.java
     文件        1533  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BEIntegerBuilder.java
     文件        1694  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BEListBuilder.java
     文件        2211  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BEMapBuilder.java
     文件         822  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BEobjectBuilder.java
     文件        6543  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BEParser.java
     文件        2585  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BEPrefixedTypeBuilder.java
     文件        2312  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BEStringBuilder.java
     文件         909  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BEType.java
     文件        1447  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\BtParseException.java
     文件        1419  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\ByteStringComparator.java
     文件        2729  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\Scanner.java
     目录           0  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\model\
     文件        2274  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\model\BEInteger.java
     文件        1116  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\model\BEIntegerModel.java
     文件        2313  2019-01-15 19:00  bt-master\bt-bencoding\src\main\java\bt\bencoding\model\BEList.java
............此处省略906个文件信息

评论

共有 条评论