Diferença

Bom dia!

Estou fazendo um player em Java sound (java.sound.sampled). Pesquisei na documentação da Sun, mas sinceramente, não entendi.

Existe o tipo de line que é o SourceDataLine, criei um line deste tipo, e chega num momento que tenho que abrir a linha, statear ela e depois escrever.

.
.
.
SourceDataLine.Info info = new DataLine.Info(SourceDataLine.class, format, ((int)stream.getFrameLength()*format.getFrameSize()));
line = (SourceDataLine) AudioSystem.getLine(info);

line.open();
line.start();

byte[] buf = new byte[line.getBufferSize()];
line.write(buf, 0, numRead-offset);

.
.
.

Minha dúvida é que somente o line.start não inicia a música (fiz testes) tem que ter o 
line.write();

Então o que faz o line.open e o line.start, qual a função deles?

Line.open apenas abre o canal de audio. Ele faz qualquer tipo de reserva de recursos que sejam necessárias para que o canal opere. Uma vez com o canal pronto, você deve sinalizar para ele que ele irá começar a receber dados de audio, e você faz isso com line.start().

As informações propriamente ditas são enviadas através do line.write().

Beleza, entendi, obrigado Vini.