如何從文件中讀取short
陣列音頻或視頻文件?我怎樣才能把它寫回文件?將文件轉換爲短陣列,反之亦然
0
A
回答
0
如果可能,我真的懷疑是否SHORT。不過,您可以查看Apache Commons File Utils讀取文件byte[]
,反之亦然。
public static byte[] readFileToByteArray(File file) throws IOException
0
下面的代碼片段使用FileInputStream讀取文件,並使用FileOutputStream將文件寫入給定路徑。
Java代碼:
byte[] fileBArray = new byte[(int)file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(fileBArray);
FileOutputStream fos = new FileOutputStream("C:\\abc.jpg");
fos.write(fileBArray);
0
這是更好的例子:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
Converting binary data into different forms.
<P>Reads binary data into memory, and writes it back out.
(If your're actually copying a file, there are better ways to do this.)
<P>Buffering is used when reading and writing files, to minimize the number
of interactions with the disk.
*/
public final class BytesStreamsAndFiles {
/** Change these settings before running this class. */
private static final String INPUT_FILE_NAME = "C:\\TEMP\\cottage.jpg";
private static final String OUTPUT_FILE_NAME = "C:\\TEMP\\cottage_copy.jpg";
/** Run the example. */
public static void main(String... aArgs) {
BytesStreamsAndFiles test = new BytesStreamsAndFiles();
//read in the bytes
byte[] fileContents = test.read(INPUT_FILE_NAME);
//test.readAlternateImpl(INPUT_FILE_NAME);
//write it back out to a different file name
test.write(fileContents, OUTPUT_FILE_NAME);
}
/** Read the given binary file, and return its contents as a byte array.*/
byte[] read(String aInputFileName){
log("Reading in binary file named : " + aInputFileName);
File file = new File(aInputFileName);
log("File size: " + file.length());
byte[] result = new byte[(int)file.length()];
try {
InputStream input = null;
try {
int totalBytesRead = 0;
input = new BufferedInputStream(new FileInputStream(file));
while(totalBytesRead < result.length){
int bytesRemaining = result.length - totalBytesRead;
//input.read() returns -1, 0, or more :
int bytesRead = input.read(result, totalBytesRead, bytesRemaining);
if (bytesRead > 0){
totalBytesRead = totalBytesRead + bytesRead;
}
}
/*
the above style is a bit tricky: it places bytes into the 'result' array;
'result' is an output parameter;
the while loop usually has a single iteration only.
*/
log("Num bytes read: " + totalBytesRead);
}
finally {
log("Closing input stream.");
input.close();
}
}
catch (FileNotFoundException ex) {
log("File not found.");
}
catch (IOException ex) {
log(ex);
}
return result;
}
/**
Write a byte array to the given file.
Writing binary data is significantly simpler than reading it.
*/
void write(byte[] aInput, String aOutputFileName){
log("Writing binary file...");
try {
OutputStream output = null;
try {
output = new BufferedOutputStream(new FileOutputStream(aOutputFileName));
output.write(aInput);
}
finally {
output.close();
}
}
catch(FileNotFoundException ex){
log("File not found.");
}
catch(IOException ex){
log(ex);
}
}
/** Read the given binary file, and return its contents as a byte array.*/
byte[] readAlternateImpl(String aInputFileName){
log("Reading in binary file named : " + aInputFileName);
File file = new File(aInputFileName);
log("File size: " + file.length());
byte[] result = null;
try {
InputStream input = new BufferedInputStream(new FileInputStream(file));
result = readAndClose(input);
}
catch (FileNotFoundException ex){
log(ex);
}
return result;
}
/**
Read an input stream, and return it as a byte array.
Sometimes the source of bytes is an input stream instead of a file.
This implementation closes aInput after it's read.
*/
byte[] readAndClose(InputStream aInput){
//carries the data from input to output :
byte[] bucket = new byte[32*1024];
ByteArrayOutputStream result = null;
try {
try {
//Use buffering? No. Buffering avoids costly access to disk or network;
//buffering to an in-memory stream makes no sense.
result = new ByteArrayOutputStream(bucket.length);
int bytesRead = 0;
while(bytesRead != -1){
//aInput.read() returns -1, 0, or more :
bytesRead = aInput.read(bucket);
if(bytesRead > 0){
result.write(bucket, 0, bytesRead);
}
}
}
finally {
aInput.close();
//result.close(); this is a no-operation for ByteArrayOutputStream
}
}
catch (IOException ex){
log(ex);
}
return result.toByteArray();
}
private static void log(Object aThing){
System.out.println(String.valueOf(aThing));
}
}
更多細節,請訪問:Reading and writing binary files
相關問題
- 1. 將列轉換成行,反之亦然
- 2. 將ansi轉換爲utf8,反之亦然
- 3. 將float2轉換爲double2,反之亦然
- 4. 將lonlat轉換爲xyz,反之亦然
- 5. 將NSString轉換爲NSData,反之亦然
- 6. 將HTML轉換爲Xliff,反之亦然
- 7. 將JavaUtilDate轉換爲NSDate,反之亦然?
- 8. 將RSAPrivateKey轉換爲PrivateKey,反之亦然
- 9. 爲什麼要將JSON文件轉換爲XML,反之亦然?
- 10. C#將PDF文件轉換爲Word文檔,反之亦然
- 11. 轉換爲字節陣列,反之亦然
- 12. 如何將矩陣轉換爲3D數組或反之亦然?
- 13. 將圖像轉換爲矩陣,反之亦然?
- 14. 將音頻,mp3文件轉換爲字符串,反之亦然
- 15. 將DataTable轉換爲XML文件並反之亦然
- 16. 如何將字符串轉換爲Java文件,反之亦然?
- 17. 將Andriod strings.xml文件轉換爲XLIFF,反之亦然
- 18. 將二進制文件轉換爲字符串,反之亦然
- 19. 行到列,反之亦然轉換
- 20. DTO轉換爲實體,反之亦然
- 21. 將序列轉換爲字典,反之亦然
- 22. .NET - 將/映射列表轉換爲對象,反之亦然
- 23. 將字符串轉換爲位序列(反之亦然)
- 24. Eclipse CDT將「普通文件夾」轉換爲「源文件夾」或反之亦然
- 25. 我如何轉換PDF文件,圖像文件,反之亦然
- 26. 使用Erlang將二進制文件轉換爲文本,反之亦然
- 27. 轉換位圖的ByteArray反之亦然
- 28. 轉換浮到ndarray或反之亦然
- 29. 轉換Unicode字符串,反之亦然
- 30. 單爲Android JavaList轉換成列表,反之亦然
使用'ObjectOutputStream'和'ObjectInputStream'。 – 2013-02-12 07:13:43