# Efficiently Parsing Large TCP Byte Array into UDT in Ignition

**URL:** <https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415>\
**Category:** Ignition\
**Created:** [June 16, 2025, 10:47am UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415 "2025-06-16T10:47:37Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Duong\_Nguyen](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@Duong\_Nguyen](https://forum.inductiveautomation.com/u/Duong_Nguyen)\
**Post date:** [June 16, 2025, 10:47am UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/1 "2025-06-16T10:47:37Z")

</div>

Dear Everyone,  
I receive a TCP message as a byte array in Ignition and use a gateway tag change script to parse it into individual fields. These fields are then written to tags organized in a UDT. The parsing logic works, but it's not efficient when the message size is large (e.g., several kilobytes). Is there a better way to parse and map the byte array directly to a UDT structure?

Thank you in advance for your support!

 ![tag](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/6/6675534d481d84bfa200116ee1a157d3d6eb293e.png)

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [June 16, 2025, 11:58am UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/2 "2025-06-16T11:58:51Z")

</div>

What's inefficient about it? How are you measuring efficiency?

---

<div class="post-metadata">

**Author:** ![michael.flagler](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/michael.flagler/32/26272_2.png) [@michael.flagler](https://forum.inductiveautomation.com/u/michael.flagler)\
**Post date:** [June 16, 2025, 1:10pm UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/3 "2025-06-16T13:10:25Z")

</div>

If you're writing each tag individually it could be slower compared to building arrays of tags and values, then at the end of parsing a message, write them all at once with a single call.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [June 16, 2025, 1:32pm UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/4 "2025-06-16T13:32:05Z")

</div>

If you aren't wrapping the byte array in a `java.nio.ByteBuffer` setting endian order, then using its accessor methods, you are doing it wrong.

---

<div class="post-metadata">

**Author:** ![Duong\_Nguyen](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@Duong\_Nguyen](https://forum.inductiveautomation.com/u/Duong_Nguyen)\
**Post date:** [June 17, 2025, 2:31am UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/5 "2025-06-17T02:31:29Z")

</div>

Thanks for all response,  
I'm looking for a more efficient solution to parse 8192 bytes of data from a TCP driver into a UDT instance. My current method is time-consuming and hard to maintain, even without considering performance. Is there a way to define a data format like a struct first, then parse all the MessageBytes into it?

---

<div class="post-metadata">

**Author:** ![Duong\_Nguyen](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@Duong\_Nguyen](https://forum.inductiveautomation.com/u/Duong_Nguyen)\
**Post date:** [June 17, 2025, 2:35am UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/6 "2025-06-17T02:35:40Z")

</div>

Thanks for your solution, I’ll give it a try.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [June 17, 2025, 2:36am UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/7 "2025-06-17T02:36:51Z")

</div>

> [@Duong\_Nguyen](#):
>
> Is there a way to define a data format like a struct first, then parse all the MessageBytes into it?

You can do this with my EtherNet/IP module's Host Device driver's scripting support.

/shameless plug

Hmmm. Probably can use the module unlicensed for pure data type and structure manipulation.

---

<div class="post-metadata">

**Author:** ![Duong\_Nguyen](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@Duong\_Nguyen](https://forum.inductiveautomation.com/u/Duong_Nguyen)\
**Post date:** [June 17, 2025, 2:57am UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/8 "2025-06-17T02:57:48Z")

</div>

It seems like it's a driver for EtherNet/IP. Is it suitable for use with the TCP Driver? Or can it be used for the purpose of creating struct data?

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [June 17, 2025, 11:42am UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/9 "2025-06-17T11:42:12Z")

</div>

> [@Duong\_Nguyen](#):
>
> seems like

?

Yes, my EtherNet/IP driver is for EtherNet/IP. 🤷‍♂️

But it installs a bunch of helpers and data type handlers in `system.cip.*` that could be useful to you. But first, you should try the ByteBuffer approach.

---

<div class="post-metadata">

**Author:** ![Duong\_Nguyen](https://avatars.discourse-cdn.com/v4/letter/d/3bc359/32.png) [@Duong\_Nguyen](https://forum.inductiveautomation.com/u/Duong_Nguyen)\
**Post date:** [June 18, 2025, 2:59am UTC](https://forum.inductiveautomation.com/t/efficiently-parsing-large-tcp-byte-array-into-udt-in-ignition/107415/10 "2025-06-18T02:59:13Z")

</div>

thanks for your support 🙂
