실제로 바이트 스트림이란 무엇입니까?

누구나 실제로 어떤 바이트 스트림이 포함되어 있는지 설명해 주시겠습니까? 바이트 (16 진 데이터) 또는 이진 데이터 또는 영어 문자 만 포함합니까? 또한 “원시 데이터”라는 용어에 대해 혼란 스럽습니다. 누군가 “4 바이트 데이터를 뒤집으라고”하면 데이터가 16 진 코드 또는 바이너리 코드라고 가정해야합니까?

댓글

  • 내 2 센트는 대답 할 가치가 없지만 (아래에 이미 좋은 항목이 있습니다) ” 원시 데이터 “는 실제로 무언가를 의미하는 것으로 해석됩니다 (‘ 무엇을 나타내야하고 어떻게 인코딩되는지 알지 못한다면 아무 의미도 없습니다. 저장 됨) betterexplained.com/articles/ … joelonsoftware. com / articles / Unicode.html
  • 나는 자바가 c / c ++ ‘ s char 사용을 피하기 위해 바이트를 생성했다고 생각합니다. ‘ 캐릭터로 이해되지 않습니다. char의 크기가 1 바이트이기 때문에 C / C ++에서 char가 많이 사용되었습니다. 또한 유닉스의 장치는 블록 및 문자 장치입니다. 문자 장치에서 읽으면 부호없는 문자 / 바이트 스트림을 얻습니다.
  • 바이트 스트림이 모호합니다. 옥텟 스트림은 그렇지 않습니다.
  • 데이터는 여러 수준에서 해석 될 수 있습니다. 하단에는 ‘ 일련의 온-오프 전기 레벨이 있습니다. 조금 더 높이면 ‘ 바이트 청크 또는 말했듯이 바이트 스트림 입니다. 더 높은 곳에서는 원시 데이터를 해석하기 시작합니다. 바이트는 다양한 방식 (인코딩)에서 텍스트로 해석 될 수 있습니다. 정수도 마찬가지입니다 (빅 엔디안 또는 리틀 엔디안). 더 높이 올라갈 수도 있습니다. zip 파일이 있습니다. 그 zip 파일은 어제의 백업입니다. 등등. 문제는 정확한 수준이 종종 암시 적이며 명확하지 않아 혼란 스러울 수 있다는 것입니다.

답변

Byte 스트림에는 바이트가 포함됩니다. 실제로는 1과 0으로 구성된 8 비트입니다. 숫자를 나타내는 경우 0에서 255까지의 숫자가됩니다 (추가 할 수 있지만 IP 주소의 4 개 숫자가 항상 0에서 255 사이의 범위 인 이유는 우연이 아닙니다). 바이트 스트림 은 일반적으로 순환 버퍼를 보유하는 데 사용되는 기본 바이트 배열을 숨기는 정교한 인터페이스입니다 (버퍼를 채우고 누군가가 버퍼를 비울 때까지 기다리면 버퍼가 채워집니다. 다시).

그게 무슨 뜻입니까? 글쎄, 그것은 텍스트 파일, 이미지 또는 라이브 비디오 스트림을 나타낼 수 있습니다. 그것이 무엇인지 는 전적으로 그것을 읽는 사람의 맥락에 달려 있습니다. 16 진수 표현은 같은 것을 말하는 또 다른 방법이지만, 때로는 숫자보다는 16 진수 표현 측면에서 바이트를 관리하는 것이 더 편리하지만 같은 의미입니다.

원시 데이터를 참조 할 때 일반적으로 바이트 데이터를 참조합니다. 데이터는 “나는 이미지 파일입니다!”라는 태그없이 제공됩니다. 일반적으로 원시 데이터를 처리 할 때만 처리합니다. ” 데이터가 전반적으로 무엇을 나타내는 지 정말 신경 쓰지 마세요. 예를 들어 이미지를 흑백 버전으로 변환하려는 경우 이미지의 원시 데이터를 읽고 3 바이트를 읽을 때마다 (실제로는 빨간색, 녹색 및 파란색의 표현), 숫자 값을 더하고 3으로 나눈 다음 그 값을 3 번 씁니다. 기본적으로 제가하는 일은 픽셀의 빨강, 녹색 및 파랑 값을 평균화하고 그 값을 회색에 해당하는 픽셀로 만드는 것입니다. 그러나 “바이트 단위”수준에서 데이터에 대한 작업을 수행하는 것에 대해 이야기 할 때 큰 그림에 대해서는 신경 쓰지 않습니다.

또는 데이터베이스에 파일을 저장하고 싶지만 Blob 데이터 유형에 “원시 데이터”를 삽입하도록 요청합니다. 이것은 단순히 파일의 데이터를 데이터베이스가 이해하고 관리 할 수있는 큰 바이트 배열로 변환하는 것을 의미합니다. 데이터베이스에서 해당 값을 검색 할 때 처음에 데이터베이스에 제공 한대로 단순히 하나의 큰 바이트 배열이됩니다. 해당 데이터가 파일이면 프로그래머는 해당 바이트를 다시 해석해야합니다. 한 번에 한 바이트 씩 파일을 읽는 것처럼 데이터를 제공합니다.

누군가가 “4 바이트 데이터를 뒤집으라고”요청했다면, 빅 엔디안 대 리틀 엔디안 숫자 해석을 의미한다고 가정합니다. , 최상위 또는 최하위 바이트로 시작하는 숫자를 기록합니다. 숫자가 빅 엔디안 또는 리틀 엔디안으로 표시되는지 여부는 중요하지 않으며 숫자를 읽는 모든 시스템이이를 일관되게 해석합니다.

이것은 실제 숫자 표현 (또는 그 문제에 대한 16 진수 표현)이 변경되었다는 것은 아닙니다. 단순히이 4 바이트가 숫자를 만드는 순서를 반대로해야한다는 것입니다. 따라서 0x01, 0x02, 0x03 및 0x04가 있다고 가정하십시오.이 값을 반대로하려면 “0x04, 0x03, 0x02, 0x01을 사용합니다. 시스템은 아마도이 4 바이트를 역순으로 읽을 것이며 이미이를 뒤집 었으므로 값은 이전과 매우 동일한 것으로 해석됩니다. 원본 데이터에 포함되었습니다.

그게 설명이되기를 바랍니다.

댓글

  • 모든 것이 정상입니다 ..! ” 원시 데이터 “에 대한 답변을 자세히 설명해 주시겠습니까?
  • @ user2720323 좋습니다. 더 잘 설명하도록 수정했습니다. ” 원시 데이터. ” 🙂
  • 한 가지 명심해야 할 사항 … 모든 데이터는 단순한 컬렉션입니다. 바이트 이러한 바이트의 의미는 일종의 메타 데이터 (파일 확장자, 데이터베이스 필드 등)에 의해 정의됩니다. 이미지 파일은 ASCII 파일로 해석 될 수 있으며 그 반대의 경우도 마찬가지입니다. 텍스트 나 이미지는 의미가 없을 수 있지만 여전히 가능합니다. (Derp … 다음 답변을 읽어야했습니다.)
  • @kevincline 제가 ‘ 아이디어를 전달하려고한다는 사실을 감사하게 생각하십시오. 제 우선 순위는 ‘ 정확한 알고리즘을 작성하지 않는 것입니다. 더 정확하고 싶다면 ‘ 인간의 눈이 인식 할 수있는 것에 따라 빨간색 녹색과 파란색 값의 무게를 측정했습니다.

답변

바이트는 단순히 정보의 단위이며 무엇이든 될 수 있습니다. 바이트 자체는 “아무 의미가 없습니다. 여기에 어떤 의미를 부여해야합니다.

따라서 확장하려면-

바이트 (16 진수 데이터) 또는 이진 데이터 또는 영어 문자 만 포함합니까?

16 진수 데이터는 이진 데이터와 동일합니다. It ” 데이터를 표시하는 다른 방법입니다. 예를 들어, 0x41 = 0b01000001 = “A”= 65 (10 진수)입니다. 영어 문자는 그 일부일뿐입니다.

누군가 “4 바이트 데이터를 뒤집어”라고 요청했다면 데이터가 무엇이라고 가정해야합니까? 16 진수 코드 또는 바이너리 코드?

16 진수는 데이터의 표현 일 뿐이므로 생각하는 방식은 중요하지 않습니다. 0x65 0x66 0x67 0x68의 데이터가있는 경우 반전하려면 0x68 0x67 0x66 0x65가 표시됩니다.이 데이터를 원래는 A B C D 이었지만 이제는 D C B A가 있습니다.

바이트 스트림으로 돌아 가기-it “일련의 데이터 일뿐입니다. 데이터를 사용하려면 데이터가 무엇을 나타내는 지 알아야합니다. 텍스트 파일을 읽는다면 파일을 읽을 때 얻게되는 바이트 스트림은 일종의 문자 일뿐입니다. 실행 파일에는 인쇄 할 수없는 문자가 많이 있으므로 바이너리 파일이라고합니다. 분명히 텍스트 편집기에서 실행 파일을 열 수는 있지만 유용한 기능은 없습니다.

댓글

  • +1 그러나 위도 비트에서 바이너리 에 대한 강조는 잘못된 것 같습니다. ” 바이너리 데이터 “는 종종 인쇄 할 수없는 문자를 포함하지만 ‘는 ” 바이너리 “는 인쇄 할 수없는 문자를 포함하고 있기 때문이 아니라 이진수로 구성되어 ‘이기 때문입니다. . ‘ 인쇄용

바이너리 “를 사용하고 있음을 이해합니다. = “e0729838dd”> text ” 데이터이지만 이로 인해 OP가 더 혼동 될 수 있습니다.

  • 반전에 대해 한 가지 질문이 있습니다. 파일에 정수 (32 비트) 325487이있는 경우이 4 바이트 정수를 어떻게 뒤집을 수 있습니까? 비슷하게 나는 단어 (” hai how are you “), 모든 문자를 바이트로 가정하여이 문자열을 뒤집는 방법이 있습니다.
  • @ user2720323 int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24); 이것은 문자 그대로 각 바이트를 취하여 올바른 위치로 이동하고 다른 바이트와 결합합니다.
  • 답변

    바이트 스트림은 정렬 된 바이트 시퀀스입니다. 선행자가없는 첫 번째 바이트가 있습니다. 후속 바이트는 두 번째 바이트입니다. 오늘날 바이트는 8 비트로 구성되는 것으로 널리 알려져 있습니다. 좀 더 정확히 알고 싶다면 옥텟 스트림 옥텟 이라는 용어를 사용합니다. 8 비트 너비가 아닌 바이트를 가진 컴퓨터가 여전히 존재합니다.

    16 진수는 숫자를 쓰는 방법이며 이진 데이터에 대한 인쇄 된 표현 역할을합니다. 16 진수는 실제로 텍스트입니다. 예를 들어, 16 진수 값 FE는 바이트를 나타낼 수 있습니다. 십진수 값이 iv id = “abde31350a”인 비트 11111110 >

    .그러나FE는 실제로FE문자로 구성된 문자열입니다. US-ASCII 또는 ISO-646 문자 세트의 2 바이트 ! 이 두 바이트는FE 이고 값이 254 인 단일 바이트입니다. 인쇄 된 표기법으로FE 표시 입니다.

    통신 채널, 파일 핸들 또는 이러한 장치가 설명 된 경우 바이트 스트림을 전달하고 다른 정보가 제공되지 않으므로 거의 확실하게 바이트가 16 진수 텍스트로 표시된다는 의미가 아닙니다 , 따라서 스트림의 각 추상 바이트에는 2 개의 물리적 바이트가 필요합니다.

    원시 데이터는 단순히 “비트 배열”을 넘어서는 구조를 갖는 것으로 해석되지 않는 비트를 의미합니다. 원시 데이터는 일반적으로 구조를 가지고 있으며 무언가를 나타내지 만 원시 데이터로 볼 때 우리는 현재 해석을 무시하고 있습니다 (예를 들어, 데이터 유형의 원시 표현을보고 정확성을 확인합니다. 비트 수준 세부 사항까지) 또는 해석이 불가능합니다 (일부 데이터가 있지만 데이터의 구조와 그 의미를 이해하지 못함).

    댓글

    • PDP-10에는 가변 크기의 바이트를 처리하는 지침이 있습니다. 가장 일반적인 것은 7 비트 ASCII와 6 비트 문자였습니다.

    Answer

    1 바이트는 8입니다. 비트. 비트는 0 또는 1입니다. “원시 데이터”는 그저 한 바이트 씩의 흐름입니다. 바이트 스트림은 파일, 네트워크 연결, 직렬화 된 객체, 난수 생성기 등에서 올 수 있습니다.

    • 바이트를 표시하는 방법에는 여러 가지가 있습니다. 바이너리 (01110110) , 16 진수 = 16 진수 (7C), 8 진수 (0271) 또는 10 진수 (215). 모든 경우에 최대 값은 255 (기본 10)입니다.

    • 때로는 ascii와 같은 문자에 바이트가 할당됩니다. 유닉스 명령 줄에 “ascii”를 입력하면 바이트 값 0-255 또는 (0-FF 16 진수)를 관련 문자에 매핑하는 큰 테이블이 나타납니다. 예를 들어 공백은 x20이고 “A”는 x40입니다. . 일부 바이트 값은 제어 문자에 매핑되며 인쇄 할 수 없습니다. 그러나 바이트 자체는 문자가 아니라 비트 묶음 일뿐입니다. 숫자.

    • “reverse 4 bytes”는 몇 바이트 123 42 231 0을 취하고 순서를 뒤집는 것입니다. 0231 42123. 바이트 스팀에 적용, I “d 아마도 4 바이트를 읽고, 뒤집고, 다음 4 바이트를 읽습니다.

    (그 문제는 관련이 있습니다. 255를 byes로 사용하려면 1 바이트 이상을 사용해야합니다. 그러나 질문은 “가장 큰”바이트가 먼저 오는지 아니면 마지막에 오는가? 빅 엔디안 또는 리틀 엔디안이라고합니다. 이유에 대한 자세한 배경 정보를 찾아보십시오. 원시 바이트 스트림에서 바이트를 섞는 것이 유용합니다.)

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다