import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
public class FileUtils {
/**
* the traditional io way
* @param filename
* @return
* @throws IOException
*/
public static byte[] toByteArray(String filename) throws IOException{
File f = new File(filename);
if(!f.exists()){
throw new FileNotFoundException(filename);
}
ByteArrayOutputStream bos = new ByteArrayOutputStream((int)f.length());
BufferedInputStream in = null;
try{
in = new BufferedInputStream(new FileInputStream(f));
int buf_size = 1024;
byte[] buffer = new byte[buf_size];
int len = 0;
while(-1 != (len = in.read(buffer,0,buf_size))){
bos.write(buffer,0,len);
}
return bos.toByteArray();
}catch (IOException e) {
e.printStackTrace();
throw e;
}finally{
try{
in.close();
}catch (IOException e) {
e.printStackTrace();
}
bos.close();
}
}
/**
* NIO way
* @param filename
* @return
* @throws IOException
*/
public static byte[] toByteArray2(String filename)throws IOException{
File f = new File(filename);
if(!f.exists()){
throw new FileNotFoundException(filename);
}
FileChannel channel = null;
FileInputStream fs = null;
try{
fs = new FileInputStream(f);
channel = fs.getChannel();
ByteBuffer byteBuffer = ByteBuffer.allocate((int)channel.size());
while((channel.read(byteBuffer)) > 0){
// do nothing
// System.out.println("reading");
}
return byteBuffer.array();
}catch (IOException e) {
e.printStackTrace();
throw e;
}finally{
try{
channel.close();
}catch (IOException e) {
e.printStackTrace();
}
try{
fs.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* Mapped File way
* MappedByteBuffer 可以在处理大文件时,提升性能
* @param filename
* @return
* @throws IOException
*/
public static byte[] toByteArray3(String filename)throws IOException{
FileChannel fc = null;
try{
fc = new RandomAccessFile(filename,"r").getChannel();
MappedByteBuffer byteBuffer = fc.map(MapMode.READ_ONLY, 0, fc.size()).load();
System.out.println(byteBuffer.isLoaded());
byte[] result = new byte[(int)fc.size()];
if (byteBuffer.remaining() > 0) {
// System.out.println("remain");
byteBuffer.get(result, 0, byteBuffer.remaining());
}
return result;
}catch (IOException e) {
e.printStackTrace();
throw e;
}finally{
try{
fc.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
本文将介绍三种读取Java文件到byte数组的方法,供开发者参考。 ### 方法一:传统IO方式 这种方法是最常见的读取文件的方式,使用`FileInputStream`、`BufferedInputStream`和`ByteArrayOutputStream`组合实现。 `...
在Java编程语言中,有时我们需要将两个或多个字节数组(`byte`数组)合并成一个新的单一数组。这种情况在处理二进制数据、文件读写或者与硬件交互时尤其常见。本文将深入探讨如何在Java中实现两个`byte`数组的合并,...
本文将深入探讨如何在Java中将byte数组与其他基本类型(如short、int、long)进行转换,这些转换在处理二进制数据、网络通信或序列化等方面至关重要。 首先,我们来看byte数组与short之间的转换。在Java中,byte...
### Java将图片转换为byte数组及反向转换的知识点总结 #### 一、知识点概述 在Java编程中,经常需要处理图像数据,特别是在网络传输或存储时,将图像转换为`byte`数组是一种常见的做法。这不仅可以提高传输效率,...
本工具“float转byte数组测试小工具”专注于将浮点数(float)转换为字节数组,这是一种在计算机内存中表示和传输数值的常用方式。在Java、C++、C#等编程语言中,这种转换尤其重要,因为它们使用不同的数据结构来...
### 手机移动开发将byte数组写入文件的JAVA代码详解 #### 一、知识点概述 在移动开发领域,特别是Android或J2ME等平台上,经常需要处理数据的读写操作,比如将从网络获取的数据保存到本地文件系统中。本篇文章主要...
在文件读取和网络通信中,我们可能会遇到分块的数据,比如在处理大文件时,可能会先读取一部分数据到`byte`数组,然后再读取另一部分,最后需要将这些部分合并。`read_struct`这样的命名可能暗示我们在处理结构化的...
标题“字节数组流byte文件”中涉及的概念是字节数组流(byte array stream),这是一种在计算机程序中处理二进制数据的方式。字节数组流通常用于在内存中传输和接收字节数据,尤其在处理文件、图片、PDF、Excel或...
### Java基本类型与Byte数组互相转换 在Java编程语言中,基本类型的变量(如`short`、`int`、`long`、`char`、`double`和`float`)和`byte`数组之间的相互转换是一项非常实用的技术,尤其是在网络通信、文件读写等...
Java 是一种 popular 的编程语言,它提供了多种方式来将对象转换为 byte 数组和将 byte 数组转换回对象。这种转换对于数据存储、网络传输和序列化非常重要。本文将介绍 Java 中将对象转换为 byte 数组的方法和将 ...
在Java编程中,将字节数组转换为16进制字符串是一项常见的任务,尤其是...了解这些概念对于处理二进制数据至关重要,特别是在网络编程、文件读写和数据序列化等场景中。希望以上内容能帮助你更好地理解和应用这些知识。
在Java编程中,将`int`类型转换为`byte`数组以及从`byte`数组还原回`int`类型是常见的操作,特别是在网络编程中。这是因为网络传输的数据通常以字节流的形式存在,而`int`等基本数据类型需要进行适当的序列化才能...
在实际项目中,这种从字节数组中提取子数组的操作非常常见,特别是在处理网络协议、文件读写、序列化或反序列化数据时。每个类都可能根据其职责和上下文,以不同的方式利用这些基本的数组操作。不过,由于没有具体的...
在Java中,有几种不同的方式来初始化和表示byte数组,如下所述: 1. **二进制表示**: 我们可以用二进制数来初始化byte数组。例如,`byte[] aa = {00010110, 01010010, 10111000};` 这里每个数字都是一个8位的二...
"Java byte数组操纵方式代码实例解析" 本文主要介绍了Java byte数组操纵方式代码实例解析,通过示例代码详细介绍了Java byte数组的操纵方式,涵盖了字节数组的基本概念、字节数组的操作方法、ByteArrayInputStream...
1. **读取字节数组**:首先,你需要获取到图片的byte数组。这可能来自于网络请求、文件读取或者本地存储。 ```java byte[] imageData = ... // 获取到的字节数组 ``` 2. **设置BitmapFactory.Options**:为了高效...
在Java编程中,处理图像数据时,有时需要将图片转换为byte数组,或者将byte数组恢复为图片。这在文件传输、数据库存储或网络通信等场景中非常常见。本文将详细讲解如何在Java中实现图片与byte数组之间的转换。 首先...
介绍php字符串与byte字节数组转化类,转换一个String字符串为byte数组,将字节数组转化为String类型的数据,转换一个int为byte数组,从字节数组中指定的位置读取一个Integer类型的数据,转换一个shor字符串为byte...
通过上述介绍,我们可以了解到Java中对象与byte数组之间的相互转换是实现对象序列化的一种常见方式。掌握了这一技能后,可以在多种应用场景中灵活运用,比如在网络传输数据、保存对象状态等方面。同时,也需要注意...
`byte`数组是Java中存储二进制数据的基本方式,非常适合处理文件,因为文件本质上都是由二进制数据构成的。 首先,我们来看第一个获取文件内容的方法,通过`FileInputStream`类实现。这段代码首先创建了一个`File`...