我需要能够从android中的文件中读取字节。
我看到的任何地方,似乎应该使用FileInputStream
来从文件中读取字节,但这不是我想要做的。
我希望能够读取一个文本文件,其中包含(编辑)字节宽度数值的文本表示(/ edit)我要保存到数组中。 我想要转换为字节数组的文本文件示例如下:
0x04 0xF2 0x33 0x21 0xAA
最终文件会更长。使用FileInputStream
获取我想要保存长度为5的数组的每个字符的值,以获得上面列出的值。
我希望像下面这样处理数组:
ExampleArray[0] = (byte) 0x04;
ExampleArray[1] = (byte) 0xF2;
ExampleArray[2] = (byte) 0x33;
ExampleArray[3] = (byte) 0x21;
ExampleArray[4] = (byte) 0xAA;
在文本文件上使用FileInputStream
将返回字符的ASCII值,而不是我需要写入数组的值。
答案 0 :(得分:0)
最简单的解决方案是使用FileInputStream.read(byte [] a)方法,该方法将字节从文件传输到字节数组。
答案 1 :(得分:0)
编辑:我似乎误解了要求。所以该文件包含字节的文本表示。
Scanner scanner = new Scanner(new FileInputStream(FILENAME));
String input;
while (scanner.hasNext()) {
input = scanner.next();
long number = Long.decode(input);
// do something with the value
}
旧答案(对于这种情况显然是错误的,但我会将其留给子孙后代):
使用FileInputStream
的read(byte[])
方法。
FileInputStream in = new FileInoutStream(filename);
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = in.read(buffer, 0, buffer.length);
答案 2 :(得分:-1)
您只是不将字节存储为文本。决不! 因为0x00可以写为文件中的一个字节,或者作为字符串,在这种情况下(十六进制)占用的空间增加4倍。 如果您需要这样做,请讨论这个决定有多糟糕! 如果您能提供明智的理由,我将编辑我的答案。
如果出现以下情况,您只能将内容保存为实际文字:
你可以写这样的字节:
public static void writeBytes(byte[] in, File file, boolean append) throws IOException {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file, append);
fos.write(in);
} finally {
if (fos != null)
fos.close();
}
}
并且如下所示:
public static byte[] readBytes(File file) throws IOException {
return readBytes(file, (int) file.length());
}
public static byte[] readBytes(File file, int length) throws IOException {
byte[] content = new byte[length];
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
while (length > 0)
length -= fis.read(content);
} finally {
if (fis != null)
fis.close();
}
return content;
}
因此:
public static void writeString(String in, File file, String charset, boolean append)
throws IOException {
writeBytes(in.getBytes(charset), file, append);
}
public static String readString(File file, String charset) throws IOException {
return new String(readBytes(file), charset);
}
写和读字符串。
请注意,我不使用try-with-resource构造,因为Android的当前Java源代码级别太低。 :(