📄 jmfapp-datasource.html
字号:
</code><a name="86782"> </a><code> public String getPassword()
</code><a name="86783"> </a><code> {
</code><a name="86784"> </a><code> return password;
</code><a name="86785"> </a><code> }</code>
</pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="86792"> </a><code> private int readReply() throws IOException
</code><a name="86793"> </a><code> {
</code><a name="86794"> </a><code> previousReplyCode = readResponse();
</code><a name="86795"> </a><code> System.out.println(previousReplyCode);
</code><a name="86796"> </a><code> switch (previousReplyCode / 100)
</code><a name="86797"> </a><code> {
</code><a name="86798"> </a><code> case 1:
</code><a name="86799"> </a><code> replyPending = true;
</code><a name="86800"> </a><code> // fall through
</code><a name="86801"> </a><code> case 2:
</code><a name="86802"> </a><code> case 3:
</code><a name="86803"> </a><code> return FTP_SUCCESS;
</code><a name="86804"> </a><code> case 5:
</code><a name="86805"> </a><code> if (previousReplyCode == 530)
</code><a name="86806"> </a><code> {
</code><a name="86807"> </a><code> if (user == null)
</code><a name="86808"> </a><code> {
</code><a name="86809"> </a><code> throw new IOException("Not logged in");
</code><a name="86810"> </a><code> }
</code><a name="86811"> </a><code> return FTP_ERROR;
</code><a name="86812"> </a><code> }
</code><a name="86813"> </a><code> if (previousReplyCode == 550)
</code><a name="86814"> </a><code> {
</code><a name="86815"> </a><code> throw new FileNotFoundException();
</code><a name="86816"> </a><code> }
</code><a name="86817"> </a><code> }
</code><a name="86818"> </a><code> return FTP_ERROR;
</code><a name="86819"> </a><code> }
</code><a name="86820"> </a><code>
</code><a name="86821"> </a><code> /**
</code><a name="86822"> </a><code> * Pulls the response from the server and returns the code as a
</code><a name="86823"> </a><code> * number. Returns -1 on failure.
</code><a name="86824"> </a><code> */
</code><a name="86825"> </a><code>
</code><a name="86826"> </a><code> private int readResponse() throws IOException
</code><a name="86827"> </a><code> {
</code><a name="86828"> </a><code> StringBuffer buff = new StringBuffer(32);
</code><a name="86829"> </a><code> String responseStr;
</code><a name="86830"> </a><code> int c;
</code><a name="86831"> </a><code> int continuingCode = -1;
</code><a name="86832"> </a><code> int code = 0;
</code><a name="86833"> </a><code>
</code><a name="86834"> </a><code> response.setSize(0);
</code><a name="86835"> </a><code>
</code><a name="86836"> </a><code> while (true)
</code><a name="86837"> </a><code> {
</code><a name="86838"> </a><code> while ((c = controlIn.read()) != -1)
</code><a name="86839"> </a><code> {
</code><a name="86840"> </a><code> if (c == '\r')
</code><a name="86841"> </a><code> {
</code><a name="86842"> </a><code> if ((c = controlIn.read()) != '\n')
</code><a name="86843"> </a><code> {
</code><a name="86844"> </a><code> buff.append('\r');</code>
</pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="86860"> </a><code> }
</code><a name="86861"> </a><code> }
</code><a name="86862"> </a><code> buff.append((char)c);
</code><a name="86863"> </a>
<a name="86869"> </a><code>
</code><a name="86870"> </a><code> if (c == '\n')
</code><a name="86871"> </a><code> {
</code><a name="86872"> </a><code> break;
</code><a name="86873"> </a><code> }
</code><a name="86874"> </a><code> }
</code><a name="86875"> </a><code> responseStr = buff.toString();
</code><a name="86876"> </a><code> buff.setLength(0);
</code><a name="86877"> </a><code> try
</code><a name="86878"> </a><code> {
</code><a name="86879"> </a><code> code = Integer.parseInt(responseStr.substring(0, 3));
</code><a name="86880"> </a><code> }
</code><a name="86881"> </a><code> catch (NumberFormatException e)
</code><a name="86882"> </a><code> {
</code><a name="86883"> </a><code> code = -1;
</code><a name="86884"> </a><code> }
</code><a name="86885"> </a><code> catch (StringIndexOutOfBoundsException e)
</code><a name="86886"> </a><code> {
</code><a name="86887"> </a><code> /* this line doesn't contain a response code, so
</code><a name="86888"> </a><code> * we just completely ignore it
</code><a name="86889"> </a><code> */
</code><a name="86890"> </a><code> continue;
</code><a name="86891"> </a><code> }
</code><a name="86892"> </a><code> response.addElement(responseStr);
</code><a name="86893"> </a><code> if (continuingCode != -1)
</code><a name="86894"> </a><code> {
</code><a name="86895"> </a><code> /* we've seen a XXX- sequence */
</code><a name="86896"> </a><code> if (code != continuingCode ||
</code><a name="86897"> </a><code> (responseStr.length() >= 4 &&
</code><a name="86898"> </a><code> responseStr.charAt(3) == '-'))
</code><a name="86899"> </a><code> {
</code><a name="86900"> </a><code> continue;
</code><a name="86901"> </a><code> }
</code><a name="86902"> </a><code> else
</code><a name="86903"> </a><code> {
</code><a name="86904"> </a><code> /* seen the end of code sequence */
</code><a name="86905"> </a><code> continuingCode = -1;
</code><a name="86906"> </a><code> break;
</code><a name="86907"> </a><code> }
</code><a name="86908"> </a><code> }
</code><a name="86909"> </a><code> else if (responseStr.length() >= 4 &&
</code><a name="86910"> </a><code> responseStr.charAt(3) == '-')
</code><a name="86911"> </a><code> {
</code><a name="86912"> </a><code> continuingCode = code;
</code><a name="86913"> </a><code> continue;
</code><a name="86914"> </a><code> }
</code><a name="86915"> </a><code> else
</code><a name="86916"> </a><code> {</code>
</pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="86934"> </a><code> break;
</code><a name="86935"> </a><code> }
</code><a name="86936"> </a><code> }
</code><a name="86937"> </a>
<a name="86943"> </a><code> previousReplyCode = code;
</code><a name="86944"> </a><code> return code;
</code><a name="86945"> </a><code> }
</code><a name="86946"> </a><code>
</code><a name="86947"> </a><code> private int issueCommand(String cmd) throws IOException
</code><a name="86948"> </a><code> {
</code><a name="86949"> </a><code> int reply;
</code><a name="86950"> </a><code> if (replyPending)
</code><a name="86951"> </a><code> {
</code><a name="86952"> </a><code> if (readReply() == FTP_ERROR)
</code><a name="86953"> </a><code> {
</code><a name="86954"> </a><code> System.out.print("Error reading pending reply\n");
</code><a name="86955"> </a><code> }
</code><a name="86956"> </a><code> }
</code><a name="86957"> </a><code> replyPending = false;
</code><a name="86958"> </a><code> do
</code><a name="86959"> </a><code> {
</code><a name="86960"> </a><code> System.out.println(cmd);
</code><a name="86961"> </a><code> controlOut.print(cmd + "\r\n");
</code><a name="86962"> </a><code> reply = readReply();
</code><a name="86963"> </a><code> } while (reply == FTP_TRY_AGAIN);
</code><a name="86964"> </a><code> return reply;
</code><a name="86965"> </a><code> }
</code><a name="86966"> </a><code> /**
</code><a name="86967"> </a><code> * Parses the mediaLocator field into host and file strings
</code><a name="86968"> </a><code> */
</code><a name="86969"> </a><code>
</code><a name="86970"> </a><code> protected void parseLocator()
</code><a name="86971"> </a><code> {
</code><a name="86972"> </a><code> initCheck();
</code><a name="86973"> </a><code> String rest = getLocator().getRemainder();
</code><a name="86974"> </a><code> System.out.println("Begin parsing of: " + rest);
</code><a name="86975"> </a><code> int p1, p2 = 0;
</code><a name="86976"> </a><code> p1 = rest.indexOf("//");
</code><a name="86977"> </a><code> p2 = rest.indexOf("/", p1+2);
</code><a name="86978"> </a><code> hostString = rest.substring(p1 + 2, p2);
</code><a name="86979"> </a><code> fileString = rest.substring(p2);
</code><a name="86980"> </a><code> System.out.println("host: " + hostString + " file: "
</code><a name="86981"> </a><code> + fileString);
</code><a name="86987"> </a><code> }
</code><a name="86988"> </a><code>}</code>
</pre>
</font></td>
</tr>
</table>
<br></font>
<h4>
<a name="82808"> </a><font color="#003366" face="Palatino, Times New Roman, Times, serif">Source Stream</font>
</h4>
<a name="86999"> </a><font size="1" face="Palatino, Times New Roman, Times, serif">
<table border="1" bordercolorlight="#FFFFFF" bordercolordark="#000000"
cellpadding="5" cellspacing="0">
<caption><b><i><font face="Palatino, Times New Roman, Times, serif"><a name="87005"> </a>Example D-2: </font></i></b></caption>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="87015"> </a><code> package intel.media.protocol.ftp;
</code><a name="87016"> </a><code>
</code><a name="87017"> </a><code> import java.io.*;
</code><a name="87018"> </a><code>import javax.media.protocol.ContentDescriptor;
</code><a name="87019"> </a><code>import javax.media.protocol.PullSourceStream;
</code><a name="87020"> </a><code>import javax.media.protocol.SourceStream;
</code><a name="87021"> </a><code>
</code><a name="87022"> </a><code>public class FTPSourceStream implements PullSourceStream
</code><a name="87023"> </a><code>{
</code><a name="87024"> </a><code> protected InputStream dataIn;
</code><a name="87025"> </a><code> protected boolean eofMarker;
</code><a name="87026"> </a><code> protected ContentDescriptor cd;
</code><a name="87027"> </a><code>
</code><a name="87028"> </a><code> public FTPSourceStream(InputStream in)
</code><a name="87029"> </a><code> {
</code><a name="87030"> </a><code> this.dataIn = in;
</code><a name="87031"> </a><code> eofMarker = false;
</code><a name="87032"> </a><code> cd = new ContentDescriptor("unknown");
</code><a name="87033"> </a><code> }
</code><a name="87034"> </a><code>
</code><a name="87035"> </a><code> // SourceSteam methods
</code><a name="87036"> </a><code>
</code><a name="87037"> </a><code> public ContentDescriptor getContentDescriptor()
</code><a name="87038"> </a><code> {
</code><a name="87039"> </a><code> return cd;
</code><a name="87040"> </a><code> }
</code><a name="87041"> </a><code>
</code><a name="87042"> </a><code> public void close() throws IOException
</code><a name="87043"> </a><code> {
</code><a name="87044"> </a><code> dataIn.close();
</code><a name="87045"> </a><code> }
</code><a name="87046"> </a><code>
</code><a name="87047"> </a><code> public boolean endOfStream()
</code><a name="87048"> </a><code> {
</code><a name="87049"> </a><code> return eofMarker;
</code><a name="87050"> </a><code> }
</code><a name="87051"> </a><code>
</code><a name="87052"> </a><code> // PullSourceStream methods
</code><a name="87053"> </a><code>
</code><a name="87054"> </a><code> public int available() throws IOException
</code><a name="87105"> </a><code> {
</code><a name="87106"> </a><code> return dataIn.available();
</code><a name="87107"> </a><code> }</code>
</pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="87065"> </a><code> public int read(byte[] buffer, int offset, int length) throws
IOException
</code><a name="87066"> </a><code> {
</code><a name="87067"> </a><code> int n = dataIn.read(buffer, offset, length);
</code><a name="87068"> </a><code> if (n == -1)
</code><a name="87069"> </a><code> {
</code><a name="87070"> </a><code> eofMarker = true;
</code><a name="87071"> </a><code> }
</code><a name="87072"> </a><code> return n;
</code><a name="87073"> </a><code> }
</code><a name="87074"> </a><code>
</code><a name="87075"> </a><code> public boolean willReadBlock() throws IOException
</code><a name="87076"> </a><code> {
</code><a name="87077"> </a><code> if(eofMarker)
</code><a name="87078"> </a><code> {
</code><a name="87079"> </a><code> return true;
</code><a name="87080"> </a><code> }
</code><a name="87081"> </a><code> else
</code><a name="87082"> </a><code> {
</code><a name="87083"> </a><code> return dataIn.available() == 0;
</code><a name="87084"> </a><code> }
</code><a name="87085"> </a><code> }
</code><a name="87086"> </a><code>
</code><a name="87087"> </a><code> public long getContentLength()
</code><a name="87088"> </a><code> {
</code><a name="87089"> </a><code> return SourceStream.LENGTH_UNKNOWN;
</code><a name="87090"> </a><code> }
</code><a name="87091"> </a><code>}
</code></pre>
</font></td>
</tr>
</table>
<br></font>
<p>
<a name="82813"> </a><font face="Palatino, Times New Roman, Times, serif"><code></code></font>
</p>
</blockquote>
<br clear="all">
<hr>
<a href="JMFTOC.html">CONTENTS</a> |
<a href="JMFApp-Demux.html">PREV </a> |
<a href="JMFApp-Controller.html">NEXT</a> |
<a href="JMFIX.html">INDEX</a></td>
<br>
<hr>
<em>
<a href="copyright.html">Copyright</a> ©
1998-1999 Sun Microsystems, Inc. All Rights Reserved.
</em>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -