Java 打开TargetDataLine时未引发异常

Java 打开TargetDataLine时未引发异常,java,audio,javasound,Java,Audio,Javasound,根据Javadocs,当我使用javax.sound.sampledTargetDataLine的以下方法时: public void open(AudioFormat format,int bufferSize) 上面说: 使用不满足此要求的请求缓冲区大小调用此方法可能会导致IllegalArgumentException` 因此,当我实现以下Java代码时: AudioFormat format = getAudioFormat(); DataLine.Info info = new Da

根据Javadocs,当我使用
javax.sound.sampledTargetDataLine
的以下方法时:

public void open(AudioFormat format,int bufferSize)
上面说:

使用不满足此要求的请求缓冲区大小调用此方法可能会导致IllegalArgumentException`

因此,当我实现以下Java代码时:

AudioFormat format = getAudioFormat();
DataLine.Info info = new DataLine.Info(TargetDataLine.class,format);

// open the TargetDataLine for capture.
try {
     TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
     line.open(format, line.getBufferSize()+3000); 
    }    
catch (LineUnavailableException ex)
{         
   ex.printStackTrace();        
}
但是当我运行上面的代码时,它不会抛出任何异常。现在根据文件:

public int getBufferSize()

获取适合数据行内部缓冲区的最大数据字节数。对于源数据行,这是可以写入数据的缓冲区的大小。对于目标数据行,它是可以从中读取数据的缓冲区的大小。请注意,使用的单位是字节,但始终对应于音频数据的整数个采样帧

这表示将返回最大大小,并且我已经添加了3000

line.open(format, line.getBufferSize()+3000); 

如上所示,为什么它不抛出任何异常?

您遗漏了JavaDoc中有关
打开的一些重要描述。更全面地说,它说:

void open(AudioFormat format,
          int bufferSize)
          throws LineUnavailableException
以指定的格式和请求的缓冲区大小打开行, 使生产线获得任何所需的系统资源并成为 操作性。缓冲区大小以字节为单位指定,但必须表示 采样帧的整数。使用 可能会导致请求的缓冲区大小不符合此要求 在一个非法的辩论中。打开的缓冲区的实际大小 行可能与请求的缓冲区大小不同。实际设置的值 可以通过随后调用DataLine.getBufferSize()查询

因此,您指定的缓冲区大小可能不是内部缓冲区的大小,甚至可能超过内部缓冲区的大小

但是,它必须“表示整数个样本帧”,否则将抛出
IllegalArgumentException
。如果您请求的内存超过了内部分配的内存,那么您将收到
LineUnavailableException
。这并不意味着请求大于当前内部缓冲区的大小将导致
LineUnavailableException


至少这是我对文档的阅读。

要更快地获得更好的帮助,请发布一篇文章。