有可能将FileOutputStream转换为字节数组吗?

时间:2016-04-04 14:07:11

标签: android file bytearray fileinputstream

我想将FileOutputStream转换为Byte数组,以便在两个应用程序之间传递二进制数据。请任何人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

要将文件转换为字节数组,请使用ByteArrayOutputStream类。此类实现一个输出流,其中数据被写入字节数组。缓冲区会在数据写入时自动增长。可以使用toByteArray()和toString()来检索数据。

要将字节数组转换回原始文件,请使用FileOutputStream类。文件输出流是用于将数据写入文件或FileDescriptor的输出流。

以下代码已经过全面测试。

 public static void main(String[] args) throws FileNotFoundException, IOException {
            File file = new File("java.pdf");

            FileInputStream fis = new FileInputStream(file);
            //System.out.println(file.exists() + "!!");
            //InputStream in = resource.openStream();
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            try {
                for (int readNum; (readNum = fis.read(buf)) != -1;) {
                    bos.write(buf, 0, readNum); //no doubt here is 0
                    //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
                    System.out.println("read " + readNum + " bytes,");
                }
            } catch (IOException ex) {
                Logger.getLogger(genJpeg.class.getName()).log(Level.SEVERE, null, ex);
            }
            byte[] bytes = bos.toByteArray();

            //below is the different part
            File someFile = new File("java2.pdf");
            FileOutputStream fos = new FileOutputStream(someFile);
            fos.write(bytes);
            fos.flush();
            fos.close();
        }

如何使用FileOutputStream将字节数组写入文件。 FileOutputStream是用于将数据写入File或FileDescriptor的输出流。

public static void main(String[] args) {

        String s = "input text to be written in output stream";

        File file = new File("outputfile.txt");

        FileOutputStream fos = null;

        try {

            fos = new FileOutputStream(file);

            // Writes bytes from the specified byte array to this file output stream 
            fos.write(s.getBytes());

        }
        catch (FileNotFoundException e) {
            System.out.println("File not found" + e);
        }
        catch (IOException ioe) {
            System.out.println("Exception while writing file " + ioe);
        }
        finally {
            // close the streams using close method
            try {
                if (fos != null) {
                    fos.close();
                }
            }
            catch (IOException ioe) {
                System.out.println("Error while closing stream: " + ioe);
            }

        }

    }

答案 1 :(得分:0)

您可以使用ByteArrayOutputStream之类的

private byte[] filetoByteArray(String path) {
    byte[] data;
    try {
        InputStream input = new FileInputStream(path);
        int byteReads;
        ByteArrayOutputStream output = new ByteArrayOutputStream(1024);
        while ((byteReads = inputStream.read()) != -1) {
            output.write(byteReads);
        }

        data = output.toByteArray();
        output.close();
        input.close();
        return data;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}