cuốn sách gpt4 ai đã làm

JAVA: Truyền phát chính xác bất kỳ tệp nào tới trình duyệt

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 19:15:29 26 4
mua khóa gpt4 Nike

Vì vậy, tôi đã tạo máy chủ HTTP cá nhân của riêng mình từ đầu bằng Java. Cho đến nay nó vẫn hoạt động tốt, nhưng có một lỗ hổng lớn. Khi tôi cố gắng đặttập tin lớn Khi được chuyển tới trình duyệt, nó sẽ xuất hiệnLỗi không gian vùng heap Java. Tôi biết cách sửa lỗi này thông qua JVM, nhưng tôi đang tìm giải pháp lâu dài cho vấn đề này.

//khai báo một số nguyên cho độ dài byte của file
int length = (int) f.length();

// bắt đầu luồng đầu vào tệp.
FileInputStream fis = new FileInputStream(f);

// mảng byte với độ dài của file
byte[] byte = byte mới[độ dài];

// ghi tệp cho đến khi hết byte.

while ((length = fis.read(byte)) != -1 ){
write(byte, 0, độ dài);
}
tuôn ra();

//đóng luồng đầu vào của tệp
fis.close();

Bằng cách này, tập tin sẽ được gửi đến trình duyệtthành côngTruyền phát hoàn hảoNhưng vấn đề là vì tôi đang tạo một mảng byte chứa độ dài của tệp. Khi tệp rất lớn, tôi gặp lỗi không gian heap.

Tôi đã thực hiện việc này bằng cách sử dụng bộ đệm như hình bên dướiĐã loại bỏvấn đề và tôi không còn gặp phải lỗi không gian heap nữa. Nhưng Cách hiển thị bên dưới không truyền tệp chính xác trong trình duyệt. Nó giống như các byte tệp đang được xáo trộn và gửi đến trình duyệt cùng nhau.

int bufferSize cuối cùng = 4096;
bộ đệm byte [] = byte mới [bufferSize];

FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis);

trong khi (đúng)
{
int length = bis.read( bộ đệm, 0, bufferSize );
nếu ( chiều dài < 0 ) bị hỏng;
write( bộ đệm, 0, độ dài );
}
tuôn ra();
bis.close();
fis.close();

Lưu ý 1:

tất cả正确的tiêu đề phản hồi Tất cả đều được gửi đến trình duyệt một cách hoàn hảo.

Lưu ý 2:

Hai loạiđường vàomáy tínhtrên trình duyệtHoàn hảolàm việc nhưng chỉLoại đầu tiênđường vàoTrình duyệt trên điện thoại thông minh nơi làm việc(Nhưng đôi khi nó mang lại cho tôiLỗi không gian heap). Nếu ai đó biết cách gửi tệp đến trình duyệt đúng cách và chuyển chúng một cách chính xác thì tôi sẽ là một người rất rất hạnh phúc.

Cảm ơn trước!

câu trả lời hay nhất

Khi nào từ BufferedInputStream Khi đọc từ , bạn có thể cho phép bộ đệm của nó xử lý việc đệm, không có lý do gì để đọc mọi thứ trong byte[](Tất nhiên là khôngbyte[] toàn bộ tập tin). Đọc từng cái một字节, dựa vào bộ đệm bên trong của luồng. Một cái gì đó như thế,

FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis);
int abyte;
while ((abyte = bis.read()) != -1 ){
viết(abyte);
}

Về JAVA: truyền phát chính xác bất kỳ tệp nào tới trình duyệt, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/36360848/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress