Warum kann ich konvertieren nur eine Darstellung in eine Zeichenfolge einmal in Restlet?

StackOverflow https://stackoverflow.com/questions/3818801

  •  26-09-2019
  •  | 
  •  

Frage

Also, Ich versuche, eine Darstellung zu einem String oder einen String entweder mit dem getText () oder write () -Methode zu konvertieren. Es scheint, dass ich nur diese Methode aufrufen kann einmal erfolgreich auf einer Darstellung ... Wenn ich die Methode erneut aufrufen, gibt sie null oder eine leere Zeichenfolge auf den zweiten Anruf. Warum ist das? Ich würde erwarten, dass es die gleiche Sache jedes Mal zurück:

public void SomeMethod(Representation rep)
{
    String repAsString = rep.getText();  // returns valid text for example: <someXml>Hello WOrld</someXml>

    String repAsString2 = rep.getText(); // returns null...  wtf?
}

Wenn ich „es falsch zu machen“, dann würde ich für alle Vorschläge offen, wie ich auf diese Daten erhalten kann.

War es hilfreich?

Lösung

Die javadocs erklären diese:

  

Der Inhalt einer Darstellung kann   mehrmals aufgerufen, wenn es eine ist   stabil, leicht zugängliche Quelle, wie ein   lokale Datei oder eine Zeichenfolge. Wenn die   Darstellung wird über eine erhaltene   temporäre Quelle wie ein Netzwerk   Buchse, dessen Inhalt nur sein   einmal abgerufen werden.

So vermutlich wird es direkt aus dem Netz oder etwas ähnliches gelesen werden.

Sie können dies überprüfen, indem isTransient() aufrufen. Wenn Sie es in der Lage sein mehrfach zu lesen, vermutlich sollte man es in einen String konvertieren und dann eine neue Representation aus dieser Zeichenfolge erstellen.

Andere Tipps

Es ist, weil in der Regel nicht die Darstellung nicht tatsächlich in der Input gelesen werden, bis sie es mit getText () fragen, und wenn Sie darum gebeten haben, werden alle Bytes gelesen wurden und in den String umgewandelt.

Dies ist die natürliche Implementierung für Effizienz: anstatt einen potenziell sehr großen String erstellen und dann die String Umwandlung in etwas Nützliches (ein JSON-Objekt, ein DOM-Baum, oder was auch immer), schreiben Sie Ihre Software auf dem Input zu arbeiten, anstatt , die Kosten für die Herstellung und das Lesens, dass die großen String zu vermeiden.

So zum Beispiel, wenn Sie eine große XML-Datei in einen Web-Service haben zu sein, können Sie die Input rechts in einen SAX-Parser ernähren.

(As @John Noten, ein StringRepresentation hüllt ein String, und kann so mehrmals gelesen werden. Aber Sie müssen einen Antrag der Darstellung liest, die die meisten wahrscheinlich ein InputRepresentation.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top