質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

3868閲覧

ByteArrayInputStreamのデータをファイル出力したい

Hoge2017

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/10/18 10:02

###前提・実現したいこと
前々回前回の質問に関連する内容です。

InputStreamのデータを指定サイズ毎に分割することに成功しました。
前々回の中で頂いたご回答を参考にさせていただきました。
今回はその分割したデータをファイルシステムの中にファイルとして出力したいです。

データをByteArrayInputStreamのbyte[]型配列として取得するところまでは出来ています。
ByteArrayInputStream bais = new ByteArrayInputStream(data, 0, offset);
のところです。
このbaisを拡張子つきのファイルとしてファイルシステムの指定のフォルダ内に出力したいです。
理由は、分割されたファイルが破損していないか、などを確かめたいからです。

###該当のソースコード

public class InputStreamSplit { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ File file = new File("C:/testdata.mp4"); try { InputStream inputStream; inputStream = new FileInputStream(file); splitAndOutput(inputStream); } catch (Exception e1) { // TODO 自動生成された catch ブロック e1.printStackTrace(); } } public static void splitAndOutput(InputStream in) throws IOException { int offset; int bytesRead; byte[] data = new byte[5242880]; boolean next; int outerLoop = 0; int innerLoop = 0; String renban = ""; do { offset = 0; // offsetのリセット Arrays.fill(data, (byte)0); next = false; while ((bytesRead = in.read(data, offset, data.length - offset)) != -1) { offset += bytesRead; innerLoop++; if (offset >= data.length) { System.out.println(data.length); next = true; break; } } if (offset >= 1) { ByteArrayInputStream bais = new ByteArrayInputStream(data, 0, offset); //ByteArrayInputStream bais = new ByteArrayInputStream(data); renban = String.format("%03d", outerLoop); // ここで bais を指定のディレクトリ配下にmp4ファイルとして出力したい() // その際、ファイル名が重複しないように、renbanをファイル名に付与する } outerLoop++; } while(next); } }

###試したこと
現状、ファイル出力の方法がわからず、止まっています。
些細な情報でも大変助かりますので、どうかよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

ご回答を参考に作成してみました。
ファイルは出力されましたが、再生できませんでした、、
また別質問で立てたいと思います。

public class InputStreamSplit { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ File file = new File("C:/testdata.mp4"); try { InputStream inputStream; inputStream = new FileInputStream(file); splitAndOutput(inputStream); } catch (Exception e1) { // TODO 自動生成された catch ブロック e1.printStackTrace(); } } public static void splitAndOutput(InputStream in) throws IOException { int offset; int bytesRead; byte[] data = new byte[5242880];// バッファ boolean next; int outerLoop = 0; int innerLoop = 0; String renban = ""; do { offset = 0; // offsetのリセット Arrays.fill(data, (byte)0); next = false; while ((bytesRead = in.read(data, offset, data.length - offset)) != -1) { offset += bytesRead; innerLoop++; if (offset >= data.length) { System.out.println(data.length); next = true; break; } } if (offset >= 1) { ByteArrayInputStream bais = new ByteArrayInputStream(data, 0, offset); // ByteArrayInputStream bais = new ByteArrayInputStream(data); renban = String.format("%03d", outerLoop); FileOutputStream fos = new FileOutputStream("C:/output"+renban+".mp4"); fos.write(data); bais.close(); fos.close(); } outerLoop++; } while(next); } }

投稿2017/10/20 01:16

編集2017/10/20 01:19
Hoge2017

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abs123

2017/10/20 01:48

詳しくは説明しませんが、再生できないのは当たり前です。 掲題されていたファイルは出力できているみたいなので tkturboさんの回答をBAにするべきだと思いますが・・・?
guest

0

InputStreamがあるのだから、OutputStreamだってあります。
これを使えばいいのでは?

クラスFileOutputStream

投稿2017/10/18 10:30

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hoge2017

2017/10/20 01:17

ありがとうございました。 ファイルが出力されました。 ただ、再生できなかったので、やはり破損していると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問