salsberry の回答履歴
- メディアファイルをバイナリ解析
Javaでmp4、m4aなどのQuickTime系のフォーマットのatomと呼ばれるデータブロックを 下記の様にツリー形式で描画したいのですが、バイナリを解析する際のアプローチが掴めません。 +--ftyp +--moov | +--mvhd | +--drm | | +--dcmd | +--trak | | +--tkhd | | +--mdia | | +--(以下省略) | +--trak | | +--tkhd | | +--mdia | | +--(以下省略) | +--udta | +--titl +--mdat ↓はあくまで頭にあるイメージですが、このような感じにしていきたいです。 FileInputStream in = new FileInputStream("music.m4a"); int ch; while ((ch = in.read()) != -1) { if ("moov".equals(Integer.toHexString(ch)) { // -の数は階層 System.out.println("+--moov"); } } まずは現在読み込んでいるところがmoovであるという判定が上記のロジックではうまくできないので どのように階層を判定すれば良いのかアドバイスいただけないでしょうか? よろしくお願い致します。 【フォーマットの参考URL】 http://labs.unoh.net/2007/09/mp43gpp3gpp2.html http://www.mpeg.co.jp/libraries/mpeg_labo/winPC_26.html#2
- javaの円グラフがうまくいきません。
import java.applet.Applet; import java.awt.*; public class graph extends Applet{ public void paint(Graphics g){ int pa[] = new int[5]; int i,count; pa[0]=-72; pa[1]=-72; pa[2]=-72; pa[3]=-72; pa[4]=-72; count=5; int k=0; if(pa[k]<0){ pa[k]=0; } int t,sum=0; for(t=0;t<count;t++){ sum=sum+pa[t]; } int u,s=0; for(i=0;i<5;i++){ for(u=0;u<i;u++){ s=s+360*pa[i-1]/sum; // } g.setColor(new Color(200,50,200)); g.fillArc(100, 100, 300, 300, 90+s,pa[i]/sum*360); } } } 実行しても真っ白のままなにも描かれていません。 count=1にしてpa[0]の部分だけを描こうとしても無理でした。 直接-72と入れるとちゃんと描かれていました。 どうしてでしょうか?
- ベストアンサー
- Java
- noname#132976
- 回答数3
- javaの円グラフがうまくいきません。
import java.applet.Applet; import java.awt.*; public class graph extends Applet{ public void paint(Graphics g){ int pa[] = new int[5]; int i,count; pa[0]=-72; pa[1]=-72; pa[2]=-72; pa[3]=-72; pa[4]=-72; count=5; int k=0; if(pa[k]<0){ pa[k]=0; } int t,sum=0; for(t=0;t<count;t++){ sum=sum+pa[t]; } int u,s=0; for(i=0;i<5;i++){ for(u=0;u<i;u++){ s=s+360*pa[i-1]/sum; // } g.setColor(new Color(200,50,200)); g.fillArc(100, 100, 300, 300, 90+s,pa[i]/sum*360); } } } 実行しても真っ白のままなにも描かれていません。 count=1にしてpa[0]の部分だけを描こうとしても無理でした。 直接-72と入れるとちゃんと描かれていました。 どうしてでしょうか?
- ベストアンサー
- Java
- noname#132976
- 回答数3
- Javaでのエンディアン変換
こんばんは☆ Javaでのエンディアン変換をご教授ください。 ファイルを読み込み、ソケット通信でサーバへデータ送信しています。 リトルエンディアンで送らなければいけないのですが、 Javaはプラットフォーム問わずにビッグエンディアンでメモリに格納するとありました。 そこで、バイトオーダーをしようと思い、 stirlingというバイナリエディタでバイナリファイルを作成して以下の2点で試しました。 <バイナリファイル構造体> struct stest { LONG l1; LONG l2; LONG l3; LONG l4; }; <バイナリデータ(数値)> 1234 (010000020000030000040000)←バイナリエディタで見たとき <テスト1結果> ・・・new InputStreamReader(in, "UnicodeLittle"); >1000200030004000 <テスト2結果> ByteBuffer buffer = ByteBuffer.wrap(bt); buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.get(); >1000200030004000 これはリトルエンディアンなのでしょうか? どちらも、 Javaで読み込み時にエンディアン指定しない時と出力結果に違いがありませんでした。 なぜでしょうか? ちなみに、データ型を意識せずに変換したいです。 色々と調べたのですが、良く分かりません。 どなたかご教授お願いいたしますm(_ _)m
- ベストアンサー
- Java
- system0001
- 回答数3
- Javaでのエンディアン変換
こんばんは☆ Javaでのエンディアン変換をご教授ください。 ファイルを読み込み、ソケット通信でサーバへデータ送信しています。 リトルエンディアンで送らなければいけないのですが、 Javaはプラットフォーム問わずにビッグエンディアンでメモリに格納するとありました。 そこで、バイトオーダーをしようと思い、 stirlingというバイナリエディタでバイナリファイルを作成して以下の2点で試しました。 <バイナリファイル構造体> struct stest { LONG l1; LONG l2; LONG l3; LONG l4; }; <バイナリデータ(数値)> 1234 (010000020000030000040000)←バイナリエディタで見たとき <テスト1結果> ・・・new InputStreamReader(in, "UnicodeLittle"); >1000200030004000 <テスト2結果> ByteBuffer buffer = ByteBuffer.wrap(bt); buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.get(); >1000200030004000 これはリトルエンディアンなのでしょうか? どちらも、 Javaで読み込み時にエンディアン指定しない時と出力結果に違いがありませんでした。 なぜでしょうか? ちなみに、データ型を意識せずに変換したいです。 色々と調べたのですが、良く分かりません。 どなたかご教授お願いいたしますm(_ _)m
- ベストアンサー
- Java
- system0001
- 回答数3
- javaの円グラフがうまくいきません。
import java.applet.Applet; import java.awt.*; public class graph extends Applet{ public void paint(Graphics g){ int pa[] = new int[5]; int i,count; pa[0]=-72; pa[1]=-72; pa[2]=-72; pa[3]=-72; pa[4]=-72; count=5; int k=0; if(pa[k]<0){ pa[k]=0; } int t,sum=0; for(t=0;t<count;t++){ sum=sum+pa[t]; } int u,s=0; for(i=0;i<5;i++){ for(u=0;u<i;u++){ s=s+360*pa[i-1]/sum; // } g.setColor(new Color(200,50,200)); g.fillArc(100, 100, 300, 300, 90+s,pa[i]/sum*360); } } } 実行しても真っ白のままなにも描かれていません。 count=1にしてpa[0]の部分だけを描こうとしても無理でした。 直接-72と入れるとちゃんと描かれていました。 どうしてでしょうか?
- ベストアンサー
- Java
- noname#132976
- 回答数3
- キャストの仕方がわかりません
キャストの仕方がわかりません メソッド内でクラスを生成し、 そのクラスで共通処理を行いたいのですが、上手くいきません。 ジェネリクスの使い方が悪いのか、キャストで怒られてしまいます。 お分かりの方、いらっしゃいましたら教授願えますか。 以下、ソースです。 interface ToolInterface { /** 結果 */ public abstract Object toolResult(); } class TestA implements ToolInterface{ @Override public Object toolResult() { return "Aです"; } } class TestB implements ToolInterface{ @Override public Object toolResult() { return "Bです"; } } public class TestMain { public static void main(String args[]) { TestMain me = new TestMain(); me.dispResult(TestA.class); me.dispResult(TestB.class); } /** このメソッドでインスタンス化及び処理を行う */ private void dispResult(Class<?> obj) { try { obj.newInstance(); //ここでキャストか何かして表示させたい ToolInterface resObj = (ToolInterface) obj; System.out.println(resObj.toolResult()); } catch (InstantiationException e) { } catch (IllegalAccessException e) { } } }
- ベストアンサー
- Java
- bonbontarou
- 回答数1
- 文字化けについて
以下のコードでコンパイルして日本語入力すると 文字化けします。 どうすれば文字化けしなくできますか? new InputStreamReader(System.in)のところもEUC_JPにしたりしたのですが文字化けしてしまいました(汗) import java.io.*; public class test { public static void main(String agrs[]) { try { BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); String boyname,girlname; int goukei=0; System.out.println("男性の名前を入力してください"); boyname=in.readLine(); System.out.println(boyname); char boynameChar[]=boyname.toCharArray(); for(int i=0;i<boyname.length();i++) { goukei+=(int)boynameChar[i]; } System.out.println("女性の名前を入力してください"); girlname=in.readLine(); char girlnameChar[]=girlname.toCharArray(); for(int i=0;i<girlname.length();i++) { goukei+=girlnameChar[i]; } System.out.print(boyname+""と+girlname+"の相性は"+goukei%100+"%"); in.close(); } catch(IOException e) { } } }
- ベストアンサー
- Java
- taiyaki_10
- 回答数2
- 考えてもちっともいい案が出てこなくって・・・
mainのString配列Pをどうにか表示したいです。 口下手なのでとりあえずソース載せます class Stage { public static void main(String[] args){ String[] P={"Hi","Hello","Bye"}; Act obj1 =new Act(); obj1.say(); } } class Act{ public String phrase[]; void say(int i){ System.out.println(phrase[i]); } void say(){ say(0); } } いまのphrasesは空なので Exception in thread "main" java.lang.NullPointerException at Act.say(Stage.java:14) at Act.say(Stage.java:19) at Stage.main(Stage.java:6) という例外が発生しているのはわかりました 中身は空なので当然phrasesにString配列のPの中身が必要だと考えました いま考えているのは出力しているのはphrasesなのでphrases=Pにすれば良いと考えています けどどうやってもエラーが帰ります。 お優しいかたこんな内容ですがアドバイスをお願いします 使いこなしたいけどなかなか上手くいかなくって
- 文字化けについて
以下のコードでコンパイルして日本語入力すると 文字化けします。 どうすれば文字化けしなくできますか? new InputStreamReader(System.in)のところもEUC_JPにしたりしたのですが文字化けしてしまいました(汗) import java.io.*; public class test { public static void main(String agrs[]) { try { BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); String boyname,girlname; int goukei=0; System.out.println("男性の名前を入力してください"); boyname=in.readLine(); System.out.println(boyname); char boynameChar[]=boyname.toCharArray(); for(int i=0;i<boyname.length();i++) { goukei+=(int)boynameChar[i]; } System.out.println("女性の名前を入力してください"); girlname=in.readLine(); char girlnameChar[]=girlname.toCharArray(); for(int i=0;i<girlname.length();i++) { goukei+=girlnameChar[i]; } System.out.print(boyname+""と+girlname+"の相性は"+goukei%100+"%"); in.close(); } catch(IOException e) { } } }
- ベストアンサー
- Java
- taiyaki_10
- 回答数2
- 考えてもちっともいい案が出てこなくって・・・
mainのString配列Pをどうにか表示したいです。 口下手なのでとりあえずソース載せます class Stage { public static void main(String[] args){ String[] P={"Hi","Hello","Bye"}; Act obj1 =new Act(); obj1.say(); } } class Act{ public String phrase[]; void say(int i){ System.out.println(phrase[i]); } void say(){ say(0); } } いまのphrasesは空なので Exception in thread "main" java.lang.NullPointerException at Act.say(Stage.java:14) at Act.say(Stage.java:19) at Stage.main(Stage.java:6) という例外が発生しているのはわかりました 中身は空なので当然phrasesにString配列のPの中身が必要だと考えました いま考えているのは出力しているのはphrasesなのでphrases=Pにすれば良いと考えています けどどうやってもエラーが帰ります。 お優しいかたこんな内容ですがアドバイスをお願いします 使いこなしたいけどなかなか上手くいかなくって
- 自クラスをnewしたインスタンスの参照
また、よろしくおねがいします。 あるインスンタンス(A)から別のクラスをnewしてインスタンス(B)を作成し class A{ public A(){} B b = new B(); public hoge(){ System.out.plintln("hoge"); } } class B{ public B(){} A.hoge(); <<= ここから自クラスをnewしたAのhoge()を起動させたい } こんな風にnewされたB側からAのメソッドを動かしたいなんて場合は、どのようにするんでしょうか?
- 自クラスをnewしたインスタンスの参照
また、よろしくおねがいします。 あるインスンタンス(A)から別のクラスをnewしてインスタンス(B)を作成し class A{ public A(){} B b = new B(); public hoge(){ System.out.plintln("hoge"); } } class B{ public B(){} A.hoge(); <<= ここから自クラスをnewしたAのhoge()を起動させたい } こんな風にnewされたB側からAのメソッドを動かしたいなんて場合は、どのようにするんでしょうか?
- javaの質問です。
自船の初期位置、針路および速力、他船の初期位置、針路および速力を読 み込み、10 分毎に2 時間後までの、船首尾航過距離と線首尾航過時間を求め るプログラムを作成しなさい。プログラムは複数のクラスを定義して作成する こと。 手が付けられなくて丸投げになってしまいますがお願いします。
- 締切済み
- Java
- kasudamari5
- 回答数1
- javaの問題わからなくって質問します
内容はEclipse上でプロジェクトフォルダを作りひとつは別のjavaファイルを動かすのともう一つはそのお同じフォルダから動かされるjavaプログラムです。 説明不足というかまだ触れてそんなにたってないのでソースを載せます class SampleManager { public static void main(String[] args){ exec obj= new exec(samlple1.java); obj.say(); } } class exec{ String phrase; exec(String phrase){ this.phrase=sample2.java; } void say(){ System.out.println(phrase); } } /////// public class samlple1 { public static String java; public static void exec(String[] args) {//execをした理由はSampleManagerにあるクラスexecを呼び出れるため System.out.println("Hello,World!")//この二つの出力結果を表示したい; System.out.println("こんにちは!"); } } ひとつのフォルダに上記のソースいれてSampleManager.java からsample.javaの出力結果の HelloWorld! こんにちは! を出力したいですがエラーはなく例外処理もありませんけど何故か出力結果はnullが返ってしまいます なぜでしょうか? アドバイスをお願いします
- java:guiプログラミングのボールの軌跡
javaのguiのプログラミングなのですが、ボールを動かし軌跡を残したいのです。repaintを使って、ボールを動かして行きながら軌跡を残すプログラムを作った所、ボールはちゃんと動いたのですが、軌跡は書いては消えて書いては消えてをくりかえしているようで、画面に残らないんです。解決方法をお教えください。
- 締切済み
- Java
- noname#180010
- 回答数3
- Javaでのcoreファイル出力について
Linux環境でJavaの常駐プログラムを動作させているのですが、C/C++でいうような、setrlimit()のような、アプリケーション側からシステムリソースを操作するようなことは、Javaでできるのでしょうか。 もう一点、そもそもJavaで、環境に依存するcoreファイルでデバッグするべきなのでしょうか。 Javaでcoreファイルに頼るべきではないなど、ポリシーについてもお詳しい方がいらっしゃいましたら、アドバイスお願いいたします。
- ベストアンサー
- Java
- hiropon_su
- 回答数1
- assemble incbin の質問です
incbin "file.dat" , 1024 , 512 ; skip the first 1024, and actually include at most 512 ここの英語ですが 最初の1024bytesは無視して あれから512byteくらいをincludeするっていうのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- yawara18
- 回答数1
- メモリーや配列変数域にプログラム書きアクセスする
Visual Studio6(32Bit)ではメモリーや配列変数域にアセンブラーでプログラムコードを直接書き込んでアセンブラーのCALL命令でそのエリアをCPUがアクセス出来たのですが。 Visual Studio8(64Bit)ではエラーになりました。 8でもアクセス可能にする方法を教えてください。