ByteBuffer 写文件
public class Main {
public static void main(String[] args) throws IOException {
String waitToWrite = "hello wporld 我的世界";
RandomAccessFile aFile = new RandomAccessFile("/Users/xxx/IdeaProjects/demo/src/main/java/nio/nio.txt", "rw");
FileChannel channel = aFile.getChannel();
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
byteBuffer.put(waitToWrite.getBytes());
byteBuffer.flip();
while(byteBuffer.hasRemaining()){
channel.write(byteBuffer);
}
channel.close();
aFile.close();
}
}
ByteBuffer读中文文件
public class Main {
public static void main(String[] args) throws IOException {
RandomAccessFile aFile = new RandomAccessFile("/Users/xxx/IdeaProjects/demo/src/main/java/nio/nio.txt", "rw");
FileChannel channel = aFile.getChannel();
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
ByteBuffer readBuffer = ByteBuffer.allocate(48);
CharBuffer charBuffer = CharBuffer.allocate(48);
int count = channel.read(readBuffer);
while(count != -1){
readBuffer.flip();
decoder.decode(readBuffer, charBuffer, false);
charBuffer.flip();
while(charBuffer.hasRemaining()){
System.out.print(charBuffer.get());
}
System.out.println();
readBuffer.clear();
charBuffer.clear();
count = channel.read(readBuffer);
}
channel.close();
aFile.close();
}
}
ByteBuffer读取普通文件
public class Main {
public static void main(String[] args) throws IOException {
RandomAccessFile aFile = new RandomAccessFile("/Users/xiangyang/IdeaProjects/demo/src/main/java/nio/nio.txt", "rw");
FileChannel channel = aFile.getChannel();
ByteBuffer readBuffer = ByteBuffer.allocate(48);
int count = channel.read(readBuffer);
while(count != -1){
readBuffer.flip();
while(readBuffer.hasRemaining()){
System.out.print((char)readBuffer.get());
}
System.out.println();
readBuffer.clear();
count = channel.read(readBuffer);
}
channel.close();
aFile.close();
}
}