728x90
반응형
앞서 프로토 파일을 만드는것은 아래의 링크에 있다.
https://machine-woong.tistory.com/639
Setter
Person.newBuilder()
.setName("test11")
.setId(4)
.setEmail("test@gmail.com").build();
//--------------------------------------------------------
// 구글예시
Person john =
Person.newBuilder()
.setId(1234)
.setName("John Doe")
.setEmail("jdoe@example.com")
.addPhones(
Person.PhoneNumber.newBuilder()
.setNumber("555-4321")
.setType(Person.PhoneType.HOME))
.build();
Edit
생성된 각Message 클래스들은 Java의String 과 같이 불변의 객체이다.
한번Message 클래스가 객체로 생성되면 해당 객체의 값은 절대로 바꿀 수 없다.
즉, 값을 바꾸고 싶거든 또 다른 객체를 생성해야 한다는 이야기이며,
Message 클래스는 Builder 클래스의Build() 메소드를 통해서만 생성이 가능하다.
방법1 ) 프로토콜 버퍼 수정시에는 toBuilder()로 빌더를 리턴 받아서 setter를 통해 값을 바꾸고
다시 .build()를 해줘야 한다.
mPerson = mPerson.toBuilder().setName("test333").build();
방법2) 덮어쓰기
- mergeFrom(Message other): (빌더 전용) other단일 스칼라 필드를 덮어쓰고
복합 필드를 병합하고 반복되는 필드를 연결하여 의 내용을 이 메시지로 병합합니다.
Person person = Person.newBuilder()
.setName("테스터")
.setId(1)
.setEmail("test@naver.com")
.setProfile(Profile.newBuilder()
.setHeight(185.01)
.setWeight(70)
.build())
.setCar(Car.newBuilder()
.setBrand("쉐보레")
.setYear(2018)
.setColor("black")
.build())
.build();
// Car 객체 데이터 변경
person = person.toBuilder().mergeCar(Car.newBuilder().setColor("white").setYear(2020).setBrand("samsung").build()).build();
방법3) newBuilder 를 사용한 덮어쓰기 2
Person person = Person.newBuilder()
.setName("테스터")
.setId(1)
.setEmail("test@naver.com")
.setProfile(Profile.newBuilder()
.setHeight(185.01)
.setWeight(70)
.build())
.setCar(Car.newBuilder()
.setBrand("쉐보레")
.setYear(2018)
.setColor("black")
.build())
.build();
showAllData(person.toString());
person= Person.newBuilder(person).setEmail("change@naver.com").build();
showAllData(person.toString());
* 어쨋든 중요한건 빌더를 받아서 다시 빌드 하는(?) 느낌인것같다
( 잘못 알고있다면, 댓글로 알려주시면 감사드리겠습니다.)
Send
writeTo 의 함수의 문제점.
프로토콜 버퍼 메시지에는 메시지의 끝을 나타내는 내용이 없으므로 파일 끝에 도달할 때까지 메시지를 계속 시도합니다. writeDelimitedTo는 메시지의 시작 부분에 길이를 지정하므로 프로토콜 버퍼는 메시지의 길이를 정확히 알 수 있습니다
방법1
byte [] sendData = person.toByteArray();
String dataLog = "";
for ( byte data : sendData){
dataLog = dataLog +" "+data;
}
client_outputStream.write(sendData);
client_outputStream.flush();
방법2
person.writeDelimitedTo(client_outputStream);
아래 블로그를 꼼꼼히 읽어보자.
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=seban21&logNo=70153343429
728x90
반응형
'개인 공부' 카테고리의 다른 글
스크랩 ) 동기? 비동기? 블록? 논블록? IOCP (0) | 2023.01.06 |
---|---|
Protocol Buffer 사용2 (0) | 2022.12.22 |
Android Protocl Buffers ver.3 사용하기 proto3 (0) | 2022.12.21 |
네트워크 - 버퍼, 버퍼링, 캡슐화 ,큐 (0) | 2022.12.20 |
네트워크 - 채널, 터널링 (0) | 2022.12.20 |