Tôi đã tìm kiếm một câu trả lời cho điều này, nhưng thực sự không thể tìm thấy bất cứ điều gì về nó. Trước đó ngày hôm nay, tôi hỏi làm thế nào tôi có thể làm cho một tập tin vào một chuỗi thông qua một mảng byte, và sau đó trở lại một lần nữa, để thu hồi sau đó.BufferedInputStream vào byte [] để được gửi qua một Socket đến một cơ sở dữ liệu
Những gì mọi người nói với tôi, là tôi phải lưu trữ mảng byte, để tránh các sự cố mã hóa khó chịu. Vì vậy, bây giờ tôi đã bắt đầu làm việc trên đó, nhưng bây giờ tôi đã đánh một bức tường.
Về cơ bản, tôi đã sử dụng các luồng chưa được lọc trước đây, để chuyển một tệp thành một mảng byte. Điều này làm việc tốt trong lý thuyết, nhưng nó chiếm rất nhiều bộ nhớ mà cuối cùng sẽ đúc ngoại lệ kích thước heap. Tôi nên sử dụng các luồng đệm thay vì (hoặc vì vậy tôi đã nói), và vấn đề tôi có bây giờ, là đi từ một BufferedInputStream đến một byte []. Tôi đã cố gắng để sao chép và sử dụng những phương pháp tìm thấy trong tài liệu này
Nơi tôi trao đổi suối unbuffered cho suối đệm. Vấn đề duy nhất, là tôi không thể trực tiếp chuyển một luồng đầu ra được đệm thành một mảng byte, như tôi có thể với một luồng không bị chặn.
Trợ giúp? :)
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public final class BufferedByteStream {
private static final int BUF_SIZE = 1024000;
public static long copy(BufferedInputStream from, BufferedOutputStream to) throws IOException {
byte[] buf = new byte[BUF_SIZE];
long total = 0;
while(true) {
int r = from.read(buf);
if(r == -1) {
break;
}
to.write(buf, 0, r);
total += r;
}
return total;
}
public static byte[] toByteArray(BufferedInputStream in) throws IOException {
BufferedOutputStream out = new BufferedOutputStream(new ByteArrayOutputStream());
copy(in, out);
return out. // <--- Problem is here
}
}
EDIT:
tôi vẫn nhận được Heap lỗi Space. Vì vậy, bây giờ tôi sẽ gửi tất cả các mã:
main.java
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import jserver.io.BufferedByteStream;
/**
*
* @author Vipar
*/
public class main {
public static void main(String[] args) {
File f = new File("<doesn't matter>");
try {
byte[] buf;
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f))) {
buf = BufferedByteStream.toByteArray(bis);
bis.close();
}
File f2 = new File("<doesn't matter>");
try (FileOutputStream fos = new FileOutputStream(f2)) {
fos.write(buf);
fos.close();
}
} catch (FileNotFoundException ex) {
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
BufferedByteStream.java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public final class BufferedByteStream {
private static final int BUF_SIZE = 1024000;
public static long copy(BufferedInputStream from, BufferedOutputStream to) throws IOException {
byte[] buf = new byte[BUF_SIZE];
long total = 0;
while(true) {
int r = from.read(buf);
if(r == -1) {
break;
}
to.write(buf, 0, r);
total += r;
}
return total;
}
public static byte[] toByteArray(BufferedInputStream in) throws IOException {
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
BufferedOutputStream out = new BufferedOutputStream(bytesOut);
copy(in, out);
return bytesOut.toByteArray();
}
}
Tại sao bạn không cho chúng tôi biết bạn đang cố giải quyết vấn đề gì, thay vì hỏi có gì sai với một nửa giải pháp? – EJP
Tôi nên có ban đầu tôi nhận ra bây giờ, nhưng tôi sẽ làm điều đó trong một câu hỏi thích hợp, nơi tôi chỉ đơn giản là đưa ra những gì tôi muốn đạt được. – OmniOwl