这两天在项目中频繁用到RandomAccessFile,mark一下。
RandomAccessFile是javaIO中内容访问类。既可以读取文件内容,也可以写入文件内容,并且与其他输入输出流不同的是,RandomAccessFile可以在任何位置读取或者写入文件。重点用到的是seek方法,可以读取到任意位置。
在创建RandomAccessFile对象的时候,除了他自己本身以后,还需要指定一个mode参数,
RandomAccessFile randomAccessFile = new RandomAccessFile(file,mode);这个mode可以指定为:
“r”:以只读方式打开。调用其他任何write方法都会抛出异常。
“rw”:以读写方式打开文件。如果该文件不存在,则创建改文件。
还有"rws"和"rwd"。这两种也是以读写的方式打开文件,不过这个mode会要求文件的内容或者元数据的更改都要写入到底层存储设备中。
大多数时候用到的都是下载中的使用:
RandomAccessFile randomFile = new RandomAccessFile(videoTmpFile, "rw"); if (!videoTmpFile.exists()){ randomFile.setLength(longVideSize); } randomFile.seek(startPos); InputStream inputStream = null; byte[] buffer = new byte[1024*1024]; try { // 注意,part.getInputStream()切记不要多次调用 inputStream = new ByteArrayInputStream(content.getBytes()); while ((len = inputStream.read(buffer)) > 0) { randomFile.write(buffer, startPos, len); } }catch (Exception e){ e.printStackTrace(); }finally { randomFile.close(); if (inputStream!=null){ inputStream.close(); } }