0

サーバーからテキスト ファイルをダウンロードするメソッドを持つアプリケーションを作成しています。このテキスト ファイルには、最大 1,000 のプロキシ IP が含まれます。ダウンロードは 10 分ごとに行われます。これを行う最も効率的な方法を見つける必要があります。

現在、取得したいもののバイトを返す Connection というクラスのメソッドがあります。したがって、そのような方法を使用してテキスト ファイルのサーバーに接続すると、バイト単位で返されます。私の他の方法では、これらのバイトから非常に長い文字列を作成します。その後、System.LineSeparator を使用して長い文字列を配列に分割しました。コードは次のとおりです。

 public static void fetchProxies(String url) {
    Connection c = new Connection();
    List<Proxy> tempProxy = new ArrayList<Proxy>();
    ByteArrayOutputStream baos = 
            c.requestBytes(url);  
    String line = new String(baos.toByteArray()); 

    String[] split = line.split(System.lineSeparator());
    //more code to come but the above works fine.

}

これは現在機能していますが、最も効率的な方法ではないことはわかっています。私

私の問題
バイトを非常に長い文字列に変換する代わりに、バイトを IP に変換する最も効率的な方法は何ですか?

4

2 に答える 2

0

String からの split メソッドは、すべての IP を分離する最速の方法ではありません。より最適化された方法でこれを達成するための他のライブラリがあります。これを読んでください:http://demeranville.com/battle-of-the-tokenizers-delimited-text-parser-performance/

文字列を分割する 7 つの異なる方法について、非常に優れた時間比較があります。

たとえば、Guava ライブラリの Splitter クラスは Iterable を返します。Guava を使用すると、結果を List として変換することもできます。

import com.google.common.base.Splitter;
...
public static void fetchProxies(String url) {
Connection c = new Connection();
List<Proxy> tempProxy = new ArrayList<Proxy>();
ByteArrayOutputStream baos = 
        c.requestBytes(url);  
String line = new String(baos.toByteArray()); 

Iterator<Element> myIterator = 
    Splitter.on(System.getProperty("line.separator")).split(line);
List<Element> myList = Lists.newArrayList(myIterator);

// do somethjing with the List...
于 2014-05-29T06:58:11.050 に答える