Πώς μετατρέπω ένα java.io.File
σε byte[]
;
Εξαρτάται από το τι σημαίνει καλύτερο για εσάς. Από πλευράς παραγωγικότητας, μην ανακαλύψετε ξανά τον τροχό και χρησιμοποιήστε το Apache Commons. Η οποία βρίσκεται εδώ IOUtils.toByteArray(InputStream input)
.
Μπορείτε επίσης να χρησιμοποιήσετε το NIO api για να το κάνετε. Θα μπορούσα να το κάνω αυτό με αυτόν τον κώδικα, εφόσον το συνολικό μέγεθος του αρχείου (σε bytes) θα χωρούσε σε ένα int.
File f = new File("c:\\wscp.script");
FileInputStream fin = null;
FileChannel ch = null;
try {
fin = new FileInputStream(f);
ch = fin.getChannel();
int size = (int) ch.size();
MappedByteBuffer buf = ch.map(MapMode.READ_ONLY, 0, size);
byte[] bytes = new byte[size];
buf.get(bytes);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (fin != null) {
fin.close();
}
if (ch != null) {
ch.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Νομίζω ότι είναι πολύ γρήγορο αφού χρησιμοποιεί το MappedByteBuffer.
// Returns the contents of the file in a byte array.
public static byte[] getBytesFromFile(File file) throws IOException {
// Get the size of the file
long length = file.length();
// You cannot create an array using a long type.
// It needs to be an int type.
// Before converting to an int type, check
// to ensure that file is not larger than Integer.MAX_VALUE.
if (length > Integer.MAX_VALUE) {
// File is too large
throw new IOException("File is too large!");
}
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// Read in the bytes
int offset = 0;
int numRead = 0;
InputStream is = new FileInputStream(file);
try {
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
} finally {
is.close();
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}
return bytes;
}