Tôi đang cố gắng chia một tệp nhị phân (như video/audio/hình ảnh) thành từng đoạn 100kb và sau đó nối các đoạn đó lại để lấy lại tệp gốc. Mã của tôi có vẻ đang hoạt động, theo nghĩa là nó chia tệp và tham gia các phần, tệp tôi nhận được có cùng kích thước với kích thước gốc. Tuy nhiên, vấn đề là nội dung bị cắt bớt - tức là, nếu đó là tệp video thì nó dừng sau 2 giây, nếu đó là tệp hình ảnh thì chỉ phần trên trông có vẻ chính xác.Tách và nối lại một tệp nhị phân trong java
Đây là mã tôi đang sử dụng (tôi có thể gửi toàn bộ mã nếu bạn muốn):
Đối với phân chia:
File ifile = new File(fname);
FileInputStream fis;
String newName;
FileOutputStream chunk;
int fileSize = (int) ifile.length();
int nChunks = 0, read = 0, readLength = Chunk_Size;
byte[] byteChunk;
try {
fis = new FileInputStream(ifile);
StupidTest.size = (int)ifile.length();
while (fileSize > 0) {
if (fileSize <= Chunk_Size) {
readLength = fileSize;
}
byteChunk = new byte[readLength];
read = fis.read(byteChunk, 0, readLength);
fileSize -= read;
assert(read==byteChunk.length);
nChunks++;
newName = fname + ".part" + Integer.toString(nChunks - 1);
chunk = new FileOutputStream(new File(newName));
chunk.write(byteChunk);
chunk.flush();
chunk.close();
byteChunk = null;
chunk = null;
}
fis.close();
fis = null;
Và đối với việc gia nhập tập tin, tôi đặt tên của tất cả các khối trong một Danh sách, sau đó sắp xếp theo tên và sau đó chạy mã sau:
File ofile = new File(fname);
FileOutputStream fos;
FileInputStream fis;
byte[] fileBytes;
int bytesRead = 0;
try {
fos = new FileOutputStream(ofile,true);
for (File file : files) {
fis = new FileInputStream(file);
fileBytes = new byte[(int) file.length()];
bytesRead = fis.read(fileBytes, 0,(int) file.length());
assert(bytesRead == fileBytes.length);
assert(bytesRead == (int) file.length());
fos.write(fileBytes);
fos.flush();
fileBytes = null;
fis.close();
fis = null;
}
fos.close();
fos = null;
Tệp có kích thước nhỏ hơn 2 GB - nhưng bạn nói đúng về phần sắp xếp, nó lấy 0,1,10,11,12 ..., 2,20, v.v. - Tôi đoán điều đó đang làm rối tung lên –
Những công việc này! Cảm ơn rất nhiều! –
Bạn được chào đón. – BalusC