0

こんにちはStackOverflowファミリー、

私の目的はURL、特定の範囲のファイルの内容を取得することです。これを行うために、2つのバイトがあります。1つは開始バイトで、もう1つは終了バイトです。

しかし、私はこれを行う方法がわかりません。私は実際にバイト配列を使用してバイトごとに読み取っています。

コードに説明を追加しました、ありがとう。

これが私のコードです:

        // Scenario - 1
        if(args.length == 3){ // 3 OLACAK
            con.setRequestMethod("GET");

            fromURL = new BufferedInputStream(con.getInputStream(), bufSize);
            toFile = new BufferedOutputStream(new FileOutputStream(outputFile), bufSize);   

            if(con.getResponseCode() == HttpURLConnection.HTTP_OK){
                // READING BYTE BY BYTE HERE
                int read = -1;
                byte[] buf = new byte[bufSize];
                while ((read = fromURL.read(buf, 0, bufSize)) >= 0) {
                    toFile.write(buf, 0, read);
                }
                toFile.close();
                System.out.println("ok");
            }
        // Scenario - 2
        }else if(args.length == 0){
            con.setRequestMethod("HEAD");

            if(con.getResponseCode() == HttpURLConnection.HTTP_OK){
                byte startRange =  0; //Integer.parseInt(args[3]);
                byte finishRange =  25;//Integer.parseInt(args[4]);


                System.out.println(con.getContentLength());
                if(startRange < 0 || finishRange > ((byte)con.getContentLength())){
                    System.out.println("Range is not OK.");
                }else{                     

                    int read = -1;
                    byte[] buf = new byte[finishRange];

                    // HOW TO INCLUDE START AND END BYTES TO THIS PART OF CODE??????
                    //////////////////////////////////////////////////////////////
                    while ((read = fromURL.read(buf, 0, finishRange)) >= startRange) {
                        //toFile.write(buf, 0, read);
                    }
                    toFile.close();

                    System.out.println("AAA");   
                }  
            }
        }else{
            System.out.println("Wrong argument count.");
        }
4

1 に答える 1

0

範囲内のバイトを読み取りたいと仮定すると[startRange, finishRange]、1つの解決策は、開始バイトをスキップしてから、の次のバイトを読み取ることfinishRangeですInputStream

long skipped = fromURL.skip(startRange);
if(skipped == startRange) {
   // OK There was enough bytes to be skipped
   if((read = fromURL.read(buf, 0, finishRange)) > -1) {
      //toFile.write(buf, 0, read);
   }
} else {
   // TODO Handle error when there was not enough bytes to be skipped
}
于 2013-03-09T09:47:20.990 に答える