При работе с C ++ std :: iostream
(например, std :: fstream
или std :: stringstream
, Гарантирует ли стандарт что-либо о взаимосвязи между чтением и записью, выполняемыми в одном потоке? То есть обязательно ли верно, что если я записываю данные в std :: fstream
, а затем пытаюсь прочитать данные из этого потока, я должен увидеть записанные мной данные? Как насчет std :: stringstream
? В качестве примера, гарантированно ли это сработает?
std::stringstream myStream;
myStream << "137 Hello 2.71828";
int myInt;
std::string myString;
double myDouble;
myStream >> myInt >> myString >> myDouble; // Parse as expected?
Или как насчет этого случая?
std::fstream myStream("some-file.txt", ios::in | ios::out);
myStream << "137 Hello 2.71828";
int myInt;
std::string myString;
double myDouble;
myStream >> myInt >> myString >> myDouble; // Parse as expected?
Я спрашиваю, потому что недавно разработал класс сетевого потока, в котором операции чтения и записи не влияют друг на друга (поскольку чтение извлекается из сеть и пишет отправку по сети). То есть запись
myNetworkStream << "Hi there!" << endl;
записывает по сети, а
myNetworkStream >> myValue;
читает из сети. Я не уверен, что такое поведение согласуется с общим контрактом на потоки. Если бы мне пришлось угадывать, вероятно, выполняется одно из следующих трех:
iostream
ничего не говорит о чередовании чтения и записи, или iostream
ничего не говорит о чередовании чтения и записи, но есть определенные положения в спецификация, определяющая, как работают стандартные типы, такие как fstream
и stringstream
, или iostream
действительно говорит что-то о чередующемся чтении и записи, что делает мой класс сетевого потока нарушает. У меня есть копия спецификации, но раздел о потоках настолько сложен и загадочен, что его почти невозможно понять. Если бы кто-нибудь мог прояснить, как именно iostream
должны вести себя при смешивании операций чтения и записи, я был бы очень признателен.
@Path ("/ датчики / {sensorid} / версия")
@Consumes ({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
@Produces ({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
...
Я хочу сделать что-то вроде этого:
@Stateless
@Path("/sensors/{sensorid}/version")
@Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
public class SensorVersionRestView extends VersionRestView{
@PathParam("sensorid")
private String sensorid;
@GET
@Path("count")
// so the complete path is i.e.
// domain.com/rs/sensors/111211/version/count
public void getCount() {
// do something with the sensorId....
}
}
Но единственное, что я получаю, это null
во время выполнения (я использую Glassfish v3 с Джерси). Компилятор и eclipse никогда не упоминают о проблеме с @PathParam
в переменной класса-члена.
Что не так с моей конструкцией?
Основная проблема в том, почему я не хочу использовать весь путь к каждому методу в этом классе, что существует другой класс, который обрабатывает некоторые операции отдыха на уровне датчика (deomain.com/rs/sensors/count, т.е.)