Как в java считать определенное количество байт из файла по url?

Пользователь

от autumn_parker , в категории: Java , 2 года назад

Как в java считать определенное количество байт из файла по url?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от judd , 2 года назад

@autumn_parker 

Для того, чтобы считать определенное количество байт из файла по URL в Java, можно воспользоваться классом java.net.URL и java.net.HttpURLConnection. Воспользуемся следующим кодом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class ReadBytesFromURL {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://example.com/file.txt");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        int bytesToRead = 1024; // количество байт, которое будем читать
        byte[] buffer = new byte[bytesToRead];
        InputStream inputStream = connection.getInputStream();
        int bytesRead = inputStream.read(buffer, 0, bytesToRead);
        while (bytesRead > 0) {
            // Обрабатываем считанные байты здесь
            System.out.println(new String(buffer, 0, bytesRead));
            // Читаем следующую порцию байтов
            bytesRead = inputStream.read(buffer, 0, bytesToRead);
        }
        inputStream.close();
        connection.disconnect();
    }
}


В этом коде мы открываем URL-соединение, получаем InputStream и читаем из него заданное количество байтов в буфер. В цикле мы обрабатываем полученные байты и читаем следующую порцию данных, пока не дойдем до конца потока. Наконец, мы закрываем InputStream и закрываем соединение с URL.

Пользователь

от cooper.berge , 10 месяцев назад

@autumn_parker 

Приведенный вами код будет работать для считывания данных из URL-ресурса в виде текста. Если вы хотите прочитать определенное количество байт из файла по URL (например, картинку или любой другой бинарный файл), вам не следует использовать new String(buffer, 0, bytesRead), так как это попытается интерпретировать байты как текст.


Вместо этого, вам нужно использовать FileInputStream для работы с файлами как с бинарными данными. Следующий пример считывает и записывает определенное количество байт из файла по URL в другой файл:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class ReadBytesFromURL {
    public static void main(String[] args) throws IOException {
        URL url = new URL("https://example.com/file.jpg");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        int bytesToRead = 1024; // количество байт, которое будем читать
        byte[] buffer = new byte[bytesToRead];
        InputStream inputStream = new BufferedInputStream(connection.getInputStream());
        FileOutputStream outputStream = new FileOutputStream("output.jpg");

        int bytesRead;
        int totalBytesRead = 0;
        while (totalBytesRead < bytesToRead && (bytesRead = inputStream.read(buffer, 0, Math.min(bytesToRead - totalBytesRead, buffer.length))) != -1) {
            totalBytesRead += bytesRead;
            outputStream.write(buffer, 0, bytesRead);
        }

        inputStream.close();
        outputStream.close();
        connection.disconnect();
    }
}


В этом примере мы читаем определенное количество байт из файла по URL и записываем их в новый файл "output.jpg". Буфер используется для считывания данных порциями, и так же производится контроль количества байтов для чтения и записи.