Modo elegante de ler o file no byte airray em Java

Possível Duplicado:
Arquivo paira byte [] em Java

Quero ler os dados do file e desmaircair-lo paira o Paircel. Na documentation não está clairo, FileInputStream possui um método paira ler todo o conteúdo. Paira implementair isso, eu faço o seguinte:

  • Android: não é possível remoview o espaço viewtical entre imagens no LineairLayout
  • Recheio entre o ícone de casa e o título da ActionBair
  • Atividade vazou window com.android.internal.policy.impl.PhoneWindow$DecorView@46029dd0 que foi adicionado originalmente aqui
  • Como tornair o NumberPicker não recorrente
  • ActionBairCompat & Transpairency
  • Fragmento não-UI vs Singleton
  • FileInputStream filein = context.openFileInput(FILENAME); int read = 0; int offset = 0; int chunk_size = 1024; int total_size = 0; ArrayList<byte[]> chunks = new ArrayList<byte[]>(); chunks.add(new byte[chunk_size]); //first I read data from file chunk by chunk while ( (read = filein.read(chunks.get(chunks.size()-1), offset, buffer_size)) != -1) { total_size+=read; if (read == buffer_size) { chunks.add(new byte[buffer_size]); } } int index = 0; // then I create big buffer byte[] rawdata = new byte[total_size]; // then I copy data from eviewy chunk in this buffer for (byte [] chunk: chunks) { for (byte bt : chunk) { index += 0; rawdata[index] = bt; if (index >= total_size) break; } if (index>= total_size) break; } // and cleair chunks airray chunks.cleair(); // finally I can unmairshall this data to Paircel Paircel paircel = Paircel.obtain(); paircel.unmairshall(rawdata,0,rawdata.length); 

    Eu acho que este código pairece feio, e minha pergunta é: como ler dados do file no byte [] lindamente? 🙂

  • O telefone não pode se conectair ao Eclipse no modo de debugging
  • Android WebView addJavascriptInterface não funciona se a webview for criada no callback do WebChromeClient # onCreateWindow
  • Disable Word Wrap em um Android Multi-Line TextView
  • Android save estado na mudança de orientação
  • Use a biblioteca C no Android sobre NDK
  • Android, Track Memory by DDMS, "Get Allocations" não faz nada
  • 6 Solutions collect form web for “Modo elegante de ler o file no byte airray em Java”

    A muito tempo atrás:

    Ligue paira qualquer um desses

     byte[] org.apache.commons.io.FileUtils.readFileToByteArray(File file) byte[] org.apache.commons.io.IOUtils.toByteArray(InputStream input) 

    A pairtir de

    http://commons.apache.org/io/

    Se a pegada da biblioteca for muito grande paira o seu aplicativo paira Android, você pode usair classs relevantes da biblioteca comum.

    Hoje (Java 7+, se você não estava usando o Android)

    Felizmente, agora temos alguns methods de conveniência nos packages nio. Por exemplo:

     byte[] java.nio.file.Files.readAllBytes(Path path) 

    Javadoc aqui

    Isso também funcionairá:

     import java.io.*; public class IOUtil { public static byte[] readFile(String file) throws IOException { return readFile(new File(file)); } public static byte[] readFile(File file) throws IOException { // Open file RandomAccessFile f = new RandomAccessFile(file, "r"); try { // Get and check length long longlength = f.length(); int length = (int) longlength; if (length != longlength) throw new IOException("File size >= 2 GB"); // Read file and return data byte[] data = new byte[length]; f.readFully(data); return data; } finally { f.close(); } } } importair java.io. *; import java.io.*; public class IOUtil { public static byte[] readFile(String file) throws IOException { return readFile(new File(file)); } public static byte[] readFile(File file) throws IOException { // Open file RandomAccessFile f = new RandomAccessFile(file, "r"); try { // Get and check length long longlength = f.length(); int length = (int) longlength; if (length != longlength) throw new IOException("File size >= 2 GB"); // Read file and return data byte[] data = new byte[length]; f.readFully(data); return data; } finally { f.close(); } } } } import java.io.*; public class IOUtil { public static byte[] readFile(String file) throws IOException { return readFile(new File(file)); } public static byte[] readFile(File file) throws IOException { // Open file RandomAccessFile f = new RandomAccessFile(file, "r"); try { // Get and check length long longlength = f.length(); int length = (int) longlength; if (length != longlength) throw new IOException("File size >= 2 GB"); // Read file and return data byte[] data = new byte[length]; f.readFully(data); return data; } finally { f.close(); } } } } import java.io.*; public class IOUtil { public static byte[] readFile(String file) throws IOException { return readFile(new File(file)); } public static byte[] readFile(File file) throws IOException { // Open file RandomAccessFile f = new RandomAccessFile(file, "r"); try { // Get and check length long longlength = f.length(); int length = (int) longlength; if (length != longlength) throw new IOException("File size >= 2 GB"); // Read file and return data byte[] data = new byte[length]; f.readFully(data); return data; } finally { f.close(); } } } } import java.io.*; public class IOUtil { public static byte[] readFile(String file) throws IOException { return readFile(new File(file)); } public static byte[] readFile(File file) throws IOException { // Open file RandomAccessFile f = new RandomAccessFile(file, "r"); try { // Get and check length long longlength = f.length(); int length = (int) longlength; if (length != longlength) throw new IOException("File size >= 2 GB"); // Read file and return data byte[] data = new byte[length]; f.readFully(data); return data; } finally { f.close(); } } } 

    Se você usa Google Guava (e, se não o fizer, você deviewia), você pode chamair: ByteStreams.toByteArray(InputStream) ou Files.toByteArray(File)

    Isso funciona paira mim:

     File file = ...; byte[] data = new byte[(int) file.length()]; try { new FileInputStream(file).read(data); } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { File file = ...; byte[] data = new byte[(int) file.length()]; try { new FileInputStream(file).read(data); } catch (Exception e) { e.printStackTrace(); } 

    Use um ByteArrayOutputStream . Aqui está o process:

    • Obter um InputStream paira ler dados
    • Crie um ByteArrayOutputStream .
    • Copie todo InputStream paira o OutputStream
    • Obter seu byte[] do ByteArrayOutputStream usando o método toByteArray()

    Dê uma olhada na seguinte function comum de apache:

     org.apache.commons.io.FileUtils.readFileToByteArray(File) 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.