相关疑难解决方法(0)

for循环和for循环之间是否存在性能差异?

如果有的话,以下两个循环之间的性能差异是什么?

for (Object o: objectArrayList) {
    o.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

for (int i=0; i<objectArrayList.size(); i++) {
    objectArrayList.get(i).DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

java performance for-loop

176
推荐指数
6
解决办法
10万
查看次数

在Java中将short转换为byte []

如何short在Java中将(2个字节)转换为字节数组,例如

short x = 233;
byte[] ret = new byte[2];

...
Run Code Online (Sandbox Code Playgroud)

它应该是这样的.但不确定.

((0xFF << 8) & x) >> 0;
Run Code Online (Sandbox Code Playgroud)

编辑:

你也可以使用:

java.nio.ByteOrder.nativeOrder();
Run Code Online (Sandbox Code Playgroud)

发现以获取本机位顺序是大还是小.另外,以下代码取自java.io.Bits:

  • byte(array/offset)为布尔值
  • 字节数组到char
  • 字节数组要短
  • 字节数组为int
  • 要浮动的字节数组
  • 字节数组为long
  • 字节数组加倍

反之亦然.

java byte short

49
推荐指数
6
解决办法
8万
查看次数

字节数组为短数组,并在java中再次返回

我有一些问题,将音频数据存储在一个字节数组中,将其转换为大端短数组,对其进行编码,然后将其更改回字节数组.这就是我所拥有的.原始音频数据存储在audioBytes2中.我使用相同的格式进行解码,而cos函数则使用减号.不幸的是,更改字节和短数据类型是不可协商的.

    short[] audioData = null;
    int nlengthInSamples = audioBytes2.length / 2;
    audioData = new short[nlengthInSamples];

    for (int i = 0; i < nlengthInSamples; i++) {
       short MSB = (short) audioBytes2[2*i+1];
       short LSB = (short) audioBytes2[2*i];
       audioData[i] = (short) (MSB << 8 | (255 & LSB));
    }

    int i = 0;
    while (i < audioData.length) {
        audioData[i] = (short)(audioData[i] + (short)5*Math.cos(2*Math.PI*i/(((Number)EncodeBox.getValue()).intValue())));
        i++;
    }

    short x = 0;
    i = 0;
    while (i < audioData.length) {
        x = audioData[i];
        audioBytes2[2*i+1] = (byte)(x …
Run Code Online (Sandbox Code Playgroud)

java arrays byte short type-conversion

43
推荐指数
5
解决办法
4万
查看次数

AudioTrack - 使用jlayer的短数组到字节数组失真(java mp3 decoder)

我正在使用jLayer解码MP3数据,通过以下调用:

SampleBuffer output = (SampleBuffer) decoder.decodeFrame(frameHeader, bitstream);
Run Code Online (Sandbox Code Playgroud)

这个返回解码数据的调用返回一个short []数组. output.getBuffer();

当我使用该方法调用AudioTrack write()时,它在我循环文件时播放正常:

at.write(output.getBuffer(), 0, output.getBuffer().length);
Run Code Online (Sandbox Code Playgroud)

但是,当我使用本答案中的任何方法将short []数组转换为byte []数组时:https://stackoverflow.com/a/12347176/1176436声音变得扭曲和抖动:

at.write(output.getBuffer(), 0, output.getBuffer().length);
Run Code Online (Sandbox Code Playgroud)

变为:

byte[] array = ShortToByte_Twiddle_Method(output.getBuffer());
at.write(array,  0,  array.length);
Run Code Online (Sandbox Code Playgroud)

我做错了什么,我该怎么做才能解决它?不幸的是,我需要将pcm数据放在我正在使用的另一个第三方库的字节数组中.如果重要,该文件为22kHz,这就是实例化的方式:

at = new AudioTrack(AudioManager.STREAM_MUSIC, 22050, AudioFormat.CHANNEL_OUT_STEREO,
                AudioFormat.ENCODING_PCM_16BIT, 10000 /* 10 second buffer */,
                AudioTrack.MODE_STREAM);   
Run Code Online (Sandbox Code Playgroud)

非常感谢你提前.

编辑:这就是我现在实例化AudioTrack变量的方式.因此对于44kHz文件,发送的值是44100,而对于22kHz文件,值是22050.

at = new AudioTrack(AudioManager.STREAM_MUSIC, decoder.getOutputFrequency(), 
                                  decoder.getOutputChannels() > 1 ? AudioFormat.CHANNEL_OUT_STEREO : AudioFormat.CHANNEL_OUT_MONO,
                                  AudioFormat.ENCODING_PCM_16BIT, 10000 /* 10 second buffer */,
                                  AudioTrack.MODE_STREAM);
Run Code Online (Sandbox Code Playgroud)

这是解码方法:

public byte[] decode(InputStream inputStream, int startMs, int maxMs) throws …
Run Code Online (Sandbox Code Playgroud)

java mp3 android pcm jlayer

8
推荐指数
1
解决办法
5857
查看次数

在JAVA中将短数组转换为字节数组

我对如何将short数组转换为byte数组感到困惑.我有下面的short数组

short[] shrt_array = new short[]{ 0x4 , 0xd7 , 0x86, 0x8c, 0xb2, 0x14, 0xc, 0x8b, 0x2d, 0x39, 0x2d, 0x2d, 0x27, 0xcb, 0x2e, 0x79, 0x46, 0x36, 0x9d , 0x62, 0x2c };
Run Code Online (Sandbox Code Playgroud)

通过使用此链接将短数组转换为字节数组这两种转换方法,我得到以下两个不同的byte数组:

 expectedByteArray = new byte[] {
    (byte) 0x4, (byte) 0xd7, (byte) 0x86, 
    (byte) 0x8c, (byte) 0xb2, (byte) 0x14,  
    (byte) 0xc, (byte) 0x8b, (byte) 0x2d,
    (byte) 0x39, (byte) 0x2d, (byte) 0x2d, 
    (byte) 0x27, (byte) 0xcb, (byte) 0x2e, 
    (byte) 0x79, (byte) …
Run Code Online (Sandbox Code Playgroud)

java byte bytearray short

3
推荐指数
2
解决办法
6089
查看次数

标签 统计

java ×5

byte ×3

short ×3

android ×1

arrays ×1

bytearray ×1

for-loop ×1

jlayer ×1

mp3 ×1

pcm ×1

performance ×1

type-conversion ×1