读取Java文件到byte数组的三种方式
来源:互联网 发布:打数字软件 编辑:程序博客网 时间:2024/06/01 07:27
- 代码如下
- 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();
- }
- }
- }
- }
1 0
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式
- 读取Java文件到byte数组的三种方式(转载)
- 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)
- STM32 学习十一 RAM下载与调试
- cmd命令大全
- WV.8-动态链表-升序链表数据
- Android SQLite 事务处理 Operation SQLite
- 直面 位操作
- 读取Java文件到byte数组的三种方式
- win7下 背景色更改为护眼颜色
- Kendo UI 学习
- 定位表中的行数据存放于哪一个具体的datafile上
- 查找字符串中最长重复字符的子串
- [C++]LeetCode: 104 Jump Game II (局部最优和全局最优法)
- java基础巩固系列(九):持有对象之间的使用与关系(Iterable、Collection、List、Queue、Set、Map、Stack)
- U3d动态加载声音
- java构造器