У меня есть серверная часть на основе Java и гибкая клиентская часть, использующая интеграцию Spring BlazeDS.Это работает нормально, но я хочу получить звук со стороны сервера в последнее время.
Я следовал этому документу BlazeDS mapping , он говорит, что когда Java вернет Byte [], он будет преобразован в ByteArray, который я хочу.Поэтому я обрабатываю файл MP3 с помощью ByteArrayOutputStream, преобразую его в Byte [] и возвращаю его обратно во внешний интерфейс, но значение, которое получает Actionscript, становится нулевым.
public Byte[] sayHello() {
Byte[] ba = null;
try {
FileInputStream fis = new FileInputStream(
"D:/e/Ryan Adams - I Wish You Were Here.mp3");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = fis.read(buffer)) > 0) {
baos.write(buffer, 0, bytesRead);
}
byte[] byteArray = baos.toByteArray();
ba = new Byte[byteArray.length];
for (int i = 0; i < byteArray.length; i++) {
ba[i] = Byte.valueOf(byteArray[i]);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ba;
}
Код ActionScript:
<s:RemoteObject id="ro" destination="helloWorldService" fault="handleFault(event)">
<s:channelSet>
<s:ChannelSet>
<s:AMFChannel uri="/flexspring/messagebroker/amf"/>
</s:ChannelSet>
</s:channelSet>
</s:RemoteObject>
...
private function loaded():void {
var bArr:ByteArray = ro.sayHello() as ByteArray;
l.text = "" + (bArr == null);
}
...
<s:Label id="l" text=""/>
И это говорит "правда".Кто-нибудь знает, в чем проблема.