Tôi biết làm thế nào để sử dụng AssetManager
để đọc một File
từ thư mục res/raw
với một InputStream
, nhưng đối với trường hợp sử dụng đặc biệt của tôi, tôi cần một FileInputStream
. Lý do tôi cần một số FileInputStream
đặc biệt là vì tôi cần lấy đối tượng FileChannel
từ nó bằng cách gọi getChannel()
.Làm thế nào để có được FileInputStream File trong thư mục tài sản
Đây là mã tôi có cho đến nay, nó đọc dữ liệu (trong trường hợp của tôi một danh sách các nguyên thủy) từ một File
:
public static int[] loadByMappedBuffer(Context context, String filename) throws IOException{
FileInputStream fis = context.openFileInput(filename);
FileChannel ch = fis.getChannel();
MappedByteBuffer mbuff = ch.map(MapMode.READ_ONLY, 0, ch.size());
IntBuffer ibuff = mbuff.asIntBuffer();
int[] array = new int[ibuff.limit()];
ibuff.get(array);
fis.close();
ch.close();
return array;
}
Tôi đã cố gắng để tạo ra File
từ một Uri
, nhưng điều đó chỉ kết quả trong một FileNotFoundException
:
Uri uri = Uri.parse("android.resource://com.example.empty/raw/file");
File file = new File(uri.getPath());
FileInputStream fis = new FileInputStream(file);
có cách nào tôi có thể nhận được một FileInputStream
đến một File
trong thư mục res/raw
?
Tôi nghĩ rằng URL của bạn là problem.And bạn nên thêm từ thư mục tài sản. –
Vì vậy, tất cả những gì bạn cần là đọc nội dung tập tin dưới dạng mảng int? Tôi có đúng không? – Ayzen
@Ayzen có, nhưng tôi cần phải làm cho nó nhanh chóng, phương pháp, mà tôi đã đọc 80K * 4 byte và chuyển nó thành int mảng 6-7 ms trên máy tính của tôi –