1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| InputStream input = new FileInputStream("hello.txt"); try { //方式一:假定一次 read 调用就读到了所有内容,且假定字节长度不超过 1024 byte[] buf = new byte[1024]; int bytesRead = input.read(buf);
//方式二:为了确保读到所有内容,可以逐个字节读取直到文件结束 int b = -1; int bytesRead = 0; while((b=input.read()) != -1) { buf[bytesRead++] = (byte)b; }
//方式三:在没有缓冲的情况下逐个字节读取性能很低,可以使用批量读入且确保读到结尾。 //不过,这还是假定文件内容长度不超过一个固定的数字 1024。如果不确定文件内容的长度,但不希望一次性分配过大的 byte 数组,又希望将文件内容全部读入,可以借助 ByteArrayOutputStream byte[] buf = new byte[1024]; int off = 0; int bytesRead = 0; while((bytesRead = input.read(buf, off, 1024-off)) != -1) { off += bytesRead; } String data = new String(buf, 0, off, "UTF-8");
//方式四:使用 ByteArrayOutputStream,改进上面读写文件代码,确保将所有文件内容读入 InputStream input = new FileInputStream("hello.txt); try { ByteArrayOutputStream output = new ByteArrayOutputSteam(); byte[] buf = new byte[1024]; int bytesRead = 0; while((bytesRead = input.read(buf)) != -1) { output.write(buf, 0, bytesRead); } String data = output.toString("UTF-8); System.out.println(data); } finally { input.close(); }
String data = new String(buf, 0, bytesRead, "UTF-8"); System.out.println(data); } finally { input.close(); }
|