Mam zaimplementowaną strukturę danych, która działa na moim komputerze, a teraz próbuję przenieść ją do mojej aplikacji na Androida. I otworzyć surowego .dat
zasobów i uzyskać InputStream
ale muszę dostać FileInputStream
:Konwersja pliku AssetInputStream na FileInputStream
FileInputStream fip = (FileInputStream) context.getResources().openRawResource(fileID);
FileChannel fc = fip.getChannel();
long bytesSizeOfFileChannel = fc.size();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_ONLY, 0L, bytesSizeOfFileChannel);
...
Powyższy kod rzuca następujący wyjątek od InputStream nie mogą być oddane do FileInputStream ale to właśnie to, czego potrzebuję:
java.lang.ClassCastException: android.content.res.AssetManager$AssetInputStream cannot be cast to java.io.FileInputStream
Cały mój kod jest zbudowany na użyciu tego FileChannel
z FileInputStream, więc chcę go nadal używać. Czy istnieje sposób, aby przejść od posiadania InputStream
z context.getResources().openRawResource(fileID)
, a następnie przekonwertować go na FileChannel
?
Nieco odpowiednich stanowisk, w których nie mogłem znaleźć roztwór roboczy o moim przypadku których android:
How to convert InputStream to FileInputStream
Converting inputStream to FileInputStream?
Using FileChannel to write any InputStream?
nie, pliki zasobów nie są „normalne” plików, to one nie istnieją w sposób system plików – pskink
Pracuję nad tym 2 tygodnie. Jeśli nie będę mógł tego zrobić, będę się śmiał przez co najmniej 2 tygodnie. – Joop
dlaczego nie możesz po prostu użyć InputStream? – pskink